Commit b356d7ca authored by 王亮's avatar 王亮

temp commit(wechat_userinfo)

parent 5702f70c
......@@ -26,7 +26,7 @@ CREATE TABLE `xyqb_user`.`user_info` (
INDEX `idx_user_phone` (`phone_no` ASC)
);
---微信用户登录表
---微信用户登录表,app_id可能需要跟app_name进行洗
ALTER TABLE `xyqb_user`.`wechat_userinfo`
ADD COLUMN `session_key` VARCHAR(255) NULL COMMENT '第三方sessionkey' AFTER `encrypted_phone_no`,
ADD COLUMN `tenant_id` INT NULL COMMENT '租户id' AFTER `session_key`,
......
......@@ -7,6 +7,8 @@ public class UserConstant {
public static final String USER_FREEZE_ERROR = "账号异常,已冻结。";
public static final Integer defaultTenantId = 1028;
public static final String defaultTenantIdString = "1028";
public static final Integer defaultTenantId = 560761;
public static final String defaultTenantIdString = "560761";
public static final String defaultAppId = "560761";
}
......@@ -125,9 +125,12 @@ public class UserController implements IBaseController {
@RequestParam(required = false, defaultValue = "") String userId,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) String dimension,
@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId,
@RequestParam(value = "tenantId", defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
,
HttpServletRequest request) {
log.info("loginV1 -> channelId:{},appChennel:{},createdFrom:{},userId:{},key:{},dimension:{}", channelId, appChannel, createdFrom, userId, key, dimension);
return login(channelId, appChannel, createdFrom, userId, key, dimension, null, request);
return login(channelId, appChannel, createdFrom, userId, key, dimension, null, request, appId,tenantId);
}
......@@ -156,9 +159,12 @@ public class UserController implements IBaseController {
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) String dimension,
@RequestParam Long geetestlog_id,
HttpServletRequest request) {
HttpServletRequest request,
@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId,
@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
log.info("loginV2 -> channelId:{},appChennel:{},createdFrom:{},userId:{},key:{},dimension:{}", channelId, appChannel, createdFrom, userId, key, dimension);
return login(channelId, appChannel, createdFrom, userId, key, dimension, geetestlog_id, request);
return login(channelId, appChannel, createdFrom, userId, key, dimension, geetestlog_id, request,appId,tenantId);
}
......@@ -176,16 +182,19 @@ public class UserController implements IBaseController {
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) String dimension,
@RequestParam(required = false) Long geetestLogId,
HttpServletRequest request) {
HttpServletRequest request,
@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId,
@RequestParam(value = "tenantId", defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
log.info("login -> channelId:{},appChannel:{},createdFrom:{},userId:{},key:{},dimension:{}", channelId, appChannel, createdFrom, userId, key, dimension);
Merchant merchant = merchantService.findMerchantByName(key);
if (merchant == null) {
return JsonResult.buildErrorStateResult("未知的连接", null);
}
if (StringUtils.length(userId) > Constants.UUID_MIN_LENGTH) {
return loginWithUserId(channelId, appChannel, createdFrom, userId, merchant, geetestLogId, request);
return loginWithUserId(channelId, appChannel, createdFrom, userId, merchant, geetestLogId, request, appId,tenantId);
} else {
return loginWithHttpBasic(channelId, appChannel, createdFrom, merchant, dimension, geetestLogId, request);
return loginWithHttpBasic(channelId, appChannel, createdFrom, merchant, dimension, geetestLogId, request,appId,tenantId);
}
}
......@@ -213,9 +222,10 @@ public class UserController implements IBaseController {
@RequestParam(required = false) String dimension,
@RequestParam(name = "click_id", required = false) String clickId,
@RequestParam(required = false) Integer tenantId,
@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId,
HttpServletRequest request) {
log.info("login/fastV1 -> channelId:{},ZappChennel:{},createdFrom:{},key:{},btRegisterChannelId:{},dimension:{},clickId:{}", channelId, appChannel, createdFrom, key, btRegisterChannelId, dimension, clickId);
return loginFast(channelId, appChannel, createdFrom, key, btRegisterChannelId, dimension, clickId, tenantId, null, request);
return loginFast(channelId, appChannel, createdFrom, key, btRegisterChannelId, dimension, clickId, tenantId, null,appId, request);
}
/**
......@@ -233,6 +243,7 @@ public class UserController implements IBaseController {
@RequestParam(name = "click_id", required = false) String clickId,
@RequestParam(required = false) Integer tenantId,
@RequestParam(required = false) Long geetestLogId,
@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId,
HttpServletRequest request) {
Map<String, JsonResult> validMap = getHeaderParam(request);
log.info("login/fast -> channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{},clickId:{}", channelId, appChannel, createdFrom, btRegisterChannelId, key, dimension, clickId);
......@@ -257,7 +268,7 @@ public class UserController implements IBaseController {
if (TenantUtil.validationTenantIdIsNullOrZero(tenantId)) {
tenantId = TenantUtil.TENANT_DEFAULT;
}
return userService.loginFast(channelId, appChannel, createdFrom, btRegisterChannelId, dimension, clickId, request, merchant, phoneNo, tenantId, geetestLogId);
return userService.loginFast(channelId, appChannel, createdFrom, btRegisterChannelId, dimension, clickId, request, merchant, phoneNo, tenantId, geetestLogId,appId);
}
/**
......@@ -311,7 +322,9 @@ public class UserController implements IBaseController {
public JsonResult register(@RequestParam String phoneNo, @RequestParam String password,
@RequestParam String verificationCode, @RequestParam(required = false) Long channelId,
@RequestParam(required = false) Long registerFrom,
@RequestParam(required = false) Long btRegisterChannelId, @RequestParam(required = false) String dimension) {
@RequestParam(required = false) Long btRegisterChannelId, @RequestParam(required = false) String dimension,
@RequestParam(value = "tenantId", defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
log.info("用户注册:register -> phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},btRegisterChannelId:{},dimension:{}", phoneNo, verificationCode, channelId, registerFrom, btRegisterChannelId, dimension);
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
log.info("用户注册失败,手机号错误:register -> registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
......@@ -329,7 +342,7 @@ public class UserController implements IBaseController {
registerFrom = 1L;
}
verifyPhoneAndCode(phoneNo, verificationCode);
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo, tenantId);
if (user != null) {
// 用户注册使用新加密方式
// user.setPassword(PasswordUtil.MD5WithSalt(password));
......@@ -358,9 +371,10 @@ public class UserController implements IBaseController {
@IpValidator
@RequestMapping("/exist")
@Deprecated
public JsonResult exist(@RequestParam String phoneNo) {
public JsonResult exist(@RequestParam String phoneNo, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
log.info("检查用户是否存在, phoneNo:{}", phoneNo);
if (userService.exist(phoneNo)) {
if (userService.exist(phoneNo,tenantId)) {
log.info("该手机号已经注册, phoneNo:{},remoteIp:{}", phoneNo, getIp());
return JsonResult.buildErrorStateResult("该手机号已经注册", null);
}
......@@ -378,9 +392,10 @@ public class UserController implements IBaseController {
@IpValidator
@RequestMapping("/exist_check")
@Deprecated
public JsonResult existForResetPwd(@RequestParam String phoneNo) {
public JsonResult existForResetPwd(@RequestParam String phoneNo, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
log.info("检查用户是否存在, phoneNo:{},remoteIp:{}", phoneNo, getIp());
return JsonResult.buildSuccessResult(null, userService.exist(phoneNo));
return JsonResult.buildSuccessResult(null, userService.exist(phoneNo,tenantId));
}
/**
......@@ -396,7 +411,8 @@ public class UserController implements IBaseController {
public JsonResult resetPassword(@RequestParam String phoneNo,
@RequestParam String password,
@RequestParam(required = false) String registerFrom,
@RequestParam String verificationCode) {
@RequestParam String verificationCode, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号错误", null);
}
......@@ -407,11 +423,11 @@ public class UserController implements IBaseController {
return JsonResult.buildErrorStateResult(PasswordUtil.TOAST_MSG, null);
}
verifyPhoneAndCode(phoneNo, verificationCode);
if (!userService.exist(phoneNo)) {
if (!userService.exist(phoneNo,tenantId)) {
log.info("修改密码失败,该手机号尚未注册, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("修改密码失败", null);
}
if (!userService.resetPassword(phoneNo, password)) {
if (!userService.resetPassword(phoneNo, password,tenantId)) {
return JsonResult.buildErrorStateResult("修改密码失败", null);
}
......@@ -431,7 +447,8 @@ public class UserController implements IBaseController {
@Deprecated
@PasswordFreeAccessValidator
@RequestMapping(path = "/resetPassword", method = RequestMethod.POST)
public JsonResult resetPassword(@RequestParam String phoneNo, @RequestParam String password, @RequestParam(required = false) String passwordNew) {
public JsonResult resetPassword(@RequestParam String phoneNo, @RequestParam String password, @RequestParam(required = false) String passwordNew, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号错误", null);
}
......@@ -441,7 +458,7 @@ public class UserController implements IBaseController {
if (!ValidationUtil.validatePassword(password)) {
return JsonResult.buildErrorStateResult(PasswordUtil.TOAST_MSG, null);
}
User user = userService.findByPhoneWithCache(phoneNo);
User user = userService.findByPhoneWithCache(phoneNo,tenantId);
if (Objects.isNull(user)) {
log.info("修改密码失败,该手机号尚未注册, phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("修改密码失败", null);
......@@ -465,7 +482,7 @@ public class UserController implements IBaseController {
}
}
if (!userService.resetPassword(phoneNo, passwordNew)) {
if (!userService.resetPassword(phoneNo, passwordNew,tenantId)) {
return JsonResult.buildErrorStateResult("修改密码失败", null);
}
return JsonResult.buildSuccessResult("修改密码成功");
......@@ -591,14 +608,14 @@ public class UserController implements IBaseController {
TokenExchange tokenExchange = tokenExchangeResult.getData();
if (tokenExchange != null) {
SessionValue sessionValue = new SessionValue();
User user = userService.findById(tokenExchange.getUserId());
User user = userService.findById(tokenExchange.getUserId(),tenantId);
if (user != null) {
LoginProperties loginProperties = JSONObject.parseObject(tokenExchange.getLoginProperties(), LoginProperties.class);
// 根据返回值生成token, 返回值包含user:session:token的值
sessionValue.setUser(user);
sessionValue.setLoginProperties(loginProperties);
sessionService.persistSessionExchange(token, sessionValue, tokenExchange.getExpire());
sessionService.persistSessionExchange(token, sessionValue, tokenExchange.getExpire(),tenantId);
}
}
......@@ -661,7 +678,8 @@ public class UserController implements IBaseController {
* @yapi http://yapi.quantgroups.com/project/17/interface/api/23661
*/
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public JsonResult logout(HttpServletRequest request) {
public JsonResult logout(HttpServletRequest request, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
String token = request.getHeader("x-auth-token");
......@@ -670,7 +688,7 @@ public class UserController implements IBaseController {
}
try {
userService.logout(token);
userService.logout(token,tenantId);
} catch (Exception e) {
log.error("登出接口系统异常token:{}", token);
return JsonResult.buildErrorStateResult("服务器异常,请稍后再试", null);
......@@ -679,17 +697,17 @@ public class UserController implements IBaseController {
return JsonResult.buildSuccessResult("登出成功");
}
private JsonResult loginWithHttpBasic(Long channelId, String appChannel, Long createdFrom, Merchant merchant, String dimension, Long geetestLogId, HttpServletRequest request) {
User user = verificateUserNameAndPassword(request);
private JsonResult loginWithHttpBasic(Long channelId, String appChannel, Long createdFrom, Merchant merchant, String dimension, Long geetestLogId, HttpServletRequest request,String appId,Integer tenantId) {
User user = verificateUserNameAndPassword(request,tenantId);
if (user == null) {
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
} else if (!user.getEnable()) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_ENABLE_ERROR, null);
} else if (!wechatRelateUserIfNecessary(user, request)) {
} else if (!wechatRelateUserIfNecessary(user, request,appId,tenantId)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
LoginProperties loginProperties = new LoginProperties("", 1, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName(), null);
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(),tenantId);
if (authBean != null) {
authBean.setRegister(false);
}
......@@ -700,7 +718,8 @@ public class UserController implements IBaseController {
return new JsonResult(authBean);
}
private User verificateUserNameAndPassword(HttpServletRequest request) {
private User verificateUserNameAndPassword(HttpServletRequest request,Integer tenantId
) {
String credential = request.getHeader("authorization");
if (StringUtils.isBlank(credential) || !credential.startsWith(Constants.PASSWORD_HEADER)) {
return null;
......@@ -723,7 +742,7 @@ public class UserController implements IBaseController {
}
String phoneNo = credentialArr[0];
String pass = credentialArr[1];
User user = userService.findByPhoneWithCache(phoneNo);
User user = userService.findByPhoneWithCache(phoneNo,tenantId);
if (user == null) {
// 向该ipv4添加错误计数器
lockIpv4Service.countErrorByIpv4(clientIp);
......@@ -763,13 +782,14 @@ public class UserController implements IBaseController {
return user;
}
private JsonResult loginWithUserId(Long channelId, String appChannel, Long createdFrom, String userId, Merchant merchant, Long geetestLogId, HttpServletRequest request) {
private JsonResult loginWithUserId(Long channelId, String appChannel, Long createdFrom, String userId, Merchant merchant, Long geetestLogId, HttpServletRequest request, String appId, Integer tenantId
) {
//查询用户
User user = userService.findByUuidInDb(userId);
User user = userService.findByUuidInDb(userId, tenantId);
if (Objects.isNull(user) || !user.getEnable()) {
log.error("用户不存在,或者已经注销,userId:{}", userId);
return JsonResult.buildErrorStateResult(USER_ERROR_OR_ENABLE_ERROR, null);
} else if (!wechatRelateUserIfNecessary(user, request)) {
} else if (!wechatRelateUserIfNecessary(user, request,appId,tenantId)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
LoginProperties loginProperties = new LoginProperties("", 4, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName(), null);
......@@ -781,7 +801,7 @@ public class UserController implements IBaseController {
geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId());
}
//更新session
return new JsonResult(sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal()));
return new JsonResult(sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(),tenantId));
}
/**
......@@ -791,7 +811,7 @@ public class UserController implements IBaseController {
* @param request - 当前请求
* @return true - 继续登录,false - 微信关联失败,重新登录
*/
private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request) {
private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request,String appId,Integer tenantId) {
Objects.requireNonNull(request, "无效请求");
String clientIp = IpUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet();
......@@ -805,7 +825,7 @@ public class UserController implements IBaseController {
Long userId = user.getId();
String phoneNo = user.getEncryptedPhoneNo();
try {
int rows = wechatService.relateUser(userId, phoneNo, request.getParameter(Constants.WECHAT_OPEN_ID));
int rows = wechatService.relateUser(userId, phoneNo, request.getParameter(Constants.WECHAT_OPEN_ID),appId,tenantId);
return rows > 0;
} catch (Exception e) {
log.error("微信关联失败,user:{}, request-Header:{}", user, JSON.toJSONString(getRequestHeaderMap(request)), e);
......@@ -864,9 +884,11 @@ public class UserController implements IBaseController {
@RequestParam(required = false, defaultValue = "") Long userId,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) String dimension
, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
//查询用户
User user = userService.findById(userId);
User user = userService.findById(userId,tenantId);
if (Objects.isNull(user) || !user.getEnable()) {
log.error("用户不存在,或者已经注销,userId:{}", userId);
return JsonResult.buildErrorStateResult(USER_ERROR_OR_ENABLE_ERROR, null);
......@@ -879,7 +901,7 @@ public class UserController implements IBaseController {
LoginProperties loginProperties = new LoginProperties("", 4, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName(), null);
try {
userService.kdspLogout(userId, loginProperties);
userService.kdspLogout(userId, loginProperties,tenantId);
} catch (Exception e) {
return JsonResult.buildErrorStateResult("服务器异常,请稍后再试", null);
}
......
package cn.quantgroup.xyqb.controller.external;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.IBaseController;
......@@ -181,7 +182,9 @@ public class WeChatController implements IBaseController {
*/
@RequestMapping("/receiveCode/extdata/{key}/{extdata}")
public void receiveCodeWithExtData(String code, @PathVariable(value = "key") String systemKey,
@PathVariable(value = "extdata") String extData, HttpServletResponse response) {
@PathVariable(value = "extdata") String extData, HttpServletResponse response,
@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId
,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId ) {
Long registerFrom = null;
String redirect = null;
String schema = null;
......@@ -192,7 +195,7 @@ public class WeChatController implements IBaseController {
extData = "";
}
if (StringUtils.isBlank(extData)) {
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, customRedirect, response);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, customRedirect, response,appId,tenantId);
return;
}
log.info("从微信extdata版本接口进入:{}, extData:{}", schema, extData);
......@@ -202,7 +205,7 @@ public class WeChatController implements IBaseController {
});
} catch (Exception ex) {
log.error("解析extData发生错误", ex);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, customRedirect, response);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, customRedirect, response,appId,tenantId);
return;
}
schema = extDataObj.getOrDefault("protocol", Constants.PROTOCOL_HEAD_HTTP).toString();
......@@ -211,7 +214,7 @@ public class WeChatController implements IBaseController {
redirect = (String) extDataObj.getOrDefault(Constants.REDIRECT, Constants.REDIRECT);
customRedirect = (String) extDataObj.getOrDefault(Constants.CUSTOMREDIRECT, null);
log.info("从微信登录,registerFrom:{}, redirect:{}", registerFrom, redirect);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, customRedirect, response);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, customRedirect, response,appId,tenantId);
}
/**
......@@ -224,7 +227,7 @@ public class WeChatController implements IBaseController {
* @param redirect
* @param response
*/
private void receiveCodeWithDefault(String code, String systemKey, String schema, Long registerFrom, String redirect, String customRedirect, HttpServletResponse response) {
private void receiveCodeWithDefault(String code, String systemKey, String schema, Long registerFrom, String redirect, String customRedirect, HttpServletResponse response,String appId,Integer tenantId) {
// 微信跳转请求入参监控
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
log.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:code:{},systemKey:{},schema:{},registerFrom:{},redirect:{},request:{}", code, systemKey, schema, registerFrom, redirect, JSON.toJSONString(getRequestHeaderMap(request)));
......@@ -240,7 +243,7 @@ public class WeChatController implements IBaseController {
}
// 从code获取token
Merchant merchant = merchantService.findMerchantByName(systemKey);
AccessTokenResponse token = wechatService.getToken(code);
AccessTokenResponse token = wechatService.getToken(code,appId,tenantId);
log.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:merchant:{},token:{}", merchant, token);
if (Objects.isNull(token) || StringUtils.isBlank(token.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url
......@@ -248,11 +251,11 @@ public class WeChatController implements IBaseController {
return;
}
// 获取已授权信息 - db
WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(token.getOpenId());
WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(token.getOpenId(),appId,tenantId);
log.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:WechatUserInfo - from DB:{}", userInfoInDb);
// welcome 首次登录
if (Objects.isNull(userInfoInDb)) {
WechatUserInfo userInfo = wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), token.getOpenId());
WechatUserInfo userInfo = wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), token.getOpenId(),appId,tenantId);
log.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:WechatUserInfo - from wechat api:{}", userInfo);
if (Objects.isNull(userInfo) || StringUtils.isBlank(userInfo.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url
......@@ -283,7 +286,7 @@ public class WeChatController implements IBaseController {
}
return;
}
User user = userService.findById(userInfoInDb.getUserId());
User user = userService.findById(userInfoInDb.getUserId(),tenantId);
// 用户不存在或已注销
if (Objects.isNull(user) || !user.getEnable()) {
// 用户已经微信登录了,但是关联信用钱包用户信息无效,跳转到注册页面
......@@ -344,14 +347,16 @@ public class WeChatController implements IBaseController {
* @yapi unknown
*/
@RequestMapping("/receiveCode/{key}")
public void receiveCodeNoRedirect(String code, @PathVariable(value = "key") String systemKey, HttpServletRequest request, HttpServletResponse response) {
public void receiveCodeNoRedirect(String code, @PathVariable(value = "key") String systemKey, HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId,
@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
Long registerFrom = null;
String redirect = null;
String schema = Constants.PROTOCOL_HEAD_HTTP;
if (Objects.equals(Constants.PROTOCOL_HEAD_HTTPS, request.getScheme())) {
schema = Constants.PROTOCOL_HEAD_HTTPS;
}
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, redirect, response);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, redirect, response,appId,tenantId);
}
private String createUserSession(User user, Merchant merchant, String redirect, String domain, Long registerFrom) {
......@@ -362,14 +367,14 @@ public class WeChatController implements IBaseController {
if (Constants.MERCHANT_BAITIAO.equals(merchant.getName())) {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget5", Constants.Channel.BAITIAO, domain, Constants.Channel.WECHAT);
} else if (Constants.MERCHANT_WECHAT_PAY.equals(merchant.getName())) {
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(),user.getTenantId());
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + Constants.Channel.WECHAT + "&key=" + merchant.getName() + "&target=cashTarget5";
} else {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget4", 1L, domain, registerFrom);
}
} else if (Constants.LOCAL.equals(redirect)) {
log.info("微信登录:redirect不为null,创建session跳到指定前端页面.");
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(),user.getTenantId());
log.info("微信登录:跳转地址{}", domain + "/weixin/callback?phoneNo=" + user.getPhoneNo() + "&token=" + authBean.getToken());
Long channelId = Constants.MERCHANT_BAITIAO.equals(merchant.getName()) ? Constants.Channel.BAITIAO : 1L;
String target = Constants.MERCHANT_BAITIAO.equals(merchant.getName()) ? "cashTarget5" : "cashTarget4";
......@@ -377,7 +382,7 @@ public class WeChatController implements IBaseController {
"&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target + "&isWechat=true";
} else if(Constants.REDIRECT_ORDER.equals(redirect)){
log.info("微信登录:redirect为orders,创建session跳到指定前端页面.(兼容多订单页面)");
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(),user.getTenantId());
return String.format("%s/loan-list?token=%s&registerFrom=%s&key=%s", xjdDomain, authBean.getToken(), registerFrom, merchant.getName());
}
return null;
......@@ -385,7 +390,7 @@ public class WeChatController implements IBaseController {
private String loginInWechatWithSessionCreated(User user, Merchant merchant, String target, Long channelId, String domain, Long registerFrom) {
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, String.valueOf(Constants.Channel.WECHAT), merchant.getId(), merchant.getName(), null);
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(),user.getTenantId());
log.info("[WeChatController][loginInWechatWithSessionCreated]微信授权及跳转:user:{},merchant:{},target:{},channelId:{},domain:{},registerFrom:{}", user, merchant, target, channelId, domain, registerFrom);
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target;
}
......@@ -456,25 +461,26 @@ public class WeChatController implements IBaseController {
@RequestMapping("/userIdToUnionId")
public JsonResult userIdToUnionId(@RequestParam Long userId) {
public JsonResult userIdToUnionId(@RequestParam Long userId,
@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
List<WechatUserInfo> wechatUserInfoList = null;
if (userId != null && userId > 0) {
wechatUserInfoList = wechatService.queryListByUserId(userId);
wechatUserInfoList = wechatService.queryListByUserId(userId,tenantId);
}
return JsonResult.buildSuccessResult("通过用户ID查询的绑定微信相关信息", wechatUserInfoList);
}
@RequestMapping("/unionIdToUserId")
public JsonResult unionIdToUserId(@RequestParam String unionId) {
public JsonResult unionIdToUserId(@RequestParam String unionId,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
List<WechatUserInfo> wechatUserInfoList = null;
if (unionId != null && !"".equals(unionId)) {
wechatUserInfoList = wechatService.queryListByUnionId(unionId);
wechatUserInfoList = wechatService.queryListByUnionId(unionId,tenantId);
}
return JsonResult.buildSuccessResult("通过unionId查询的绑定微信相关信息", wechatUserInfoList);
}
@PostMapping("/unionIdToUserIds")
public JsonResult unionIdToUserIds(@RequestBody Map<String, Object> params) {
public JsonResult unionIdToUserIds(@RequestBody Map<String, Object> params, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
List<WechatUserInfo> wechatUserInfoList = null;
if (MapUtils.isNotEmpty(params)) {
List<String> unionIds = (List<String>) params.get("unionIds");
......@@ -482,7 +488,7 @@ public class WeChatController implements IBaseController {
if (unionIds.size() > 500) {
unionIds = unionIds.subList(0,500);
}
wechatUserInfoList = wechatService.queryListByUnionIds(unionIds);
wechatUserInfoList = wechatService.queryListByUnionIds(unionIds,tenantId);
}
}
......
package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.controller.IBaseController;
......@@ -71,7 +72,7 @@ public class AppController implements IBaseController {
@RequestParam(required = false) Long registerFrom,
@RequestParam(required = true) Long channelId,
@RequestParam(required = true) String appChannel,
@RequestParam(required = false) Integer tenantId,
@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId,
HttpServletRequest request) {
if (TenantUtil.validationTenantIdIsNullOrZero(tenantId)) {
......@@ -84,7 +85,7 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNumber)) {
result = JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}else{
User user = userService.findByPhoneInDb(phoneNumber);
User user = userService.findByPhoneInDb(phoneNumber,tenantId);
// 默认为已注册
Boolean isRegister = false;
if (user == null) {
......@@ -104,7 +105,7 @@ public class AppController implements IBaseController {
result = JsonResult.buildErrorStateResult("无效的商户", null);
}else{
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, merchant.getId(), merchant.getName(), null);
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.AUTHLOGIN.ordinal());
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.AUTHLOGIN.ordinal(),tenantId);
LoginInfo.LoginContext context = new LoginInfo.LoginContext();
context.setChannelId(channelId);
context.setCreatedFrom(registerFrom);
......@@ -152,12 +153,13 @@ public class AppController implements IBaseController {
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
@RequestParam(required = false, defaultValue = "1") Long channelId,
@RequestParam(required = false, defaultValue = "") String appChannel,
@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId,
HttpServletRequest request) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
log.info("第三方用户登录 [AppController] login --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, channelId, btRegisterChannelId, IpUtil.getRemoteIP(request), idNo, name);
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (user == null) {
user = userRegisterService.register(registerFrom, phoneNo, name, channelId, btRegisterChannelId);
}
......@@ -173,7 +175,7 @@ public class AppController implements IBaseController {
}
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, merchant.getId(), merchant.getName(), null);
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGIN.ordinal());
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGIN.ordinal(),tenantId);
log.info("第三方用户登录成功 [AppController] login --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
return JsonResult.buildSuccessResult("登录成功", bean);
}
......@@ -206,7 +208,8 @@ public class AppController implements IBaseController {
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
@RequestParam(required = false, defaultValue = "1") Long channelId,
@RequestParam(required = false, defaultValue = "") String appChannel,
@RequestParam(required = false) Integer tenantId,
@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId,
HttpServletRequest request) {
if (TenantUtil.validationTenantIdIsNullOrZero(tenantId)) {
tenantId = TenantUtil.TENANT_DEFAULT;
......@@ -215,14 +218,14 @@ public class AppController implements IBaseController {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
log.info("第三方用户登录 [AppController] loginSuper --> loginFrom:{},phoneNo:{},appChannel:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, phoneNo, appChannel, channelId, btRegisterChannelId, IpUtil.getRemoteIP(request), idNo, name);
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
boolean isRegister=false;
if (user == null) {
try {
user = userRegisterService.register(registerFrom, phoneNo, name, channelId, btRegisterChannelId);
isRegister=true;
} catch (PersistenceException e) {
user = userService.findByPhoneInDb(phoneNo);
user = userService.findByPhoneInDb(phoneNo,tenantId);
}
}
if (user == null) {
......@@ -238,7 +241,7 @@ public class AppController implements IBaseController {
log.info("=addLoginInfo end");
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, merchant.getId(), merchant.getName(), tenantId);
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGIN.ordinal());
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGIN.ordinal(),tenantId);
log.info("=createSession end");
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUser(new UserRet(user));
......@@ -316,7 +319,7 @@ public class AppController implements IBaseController {
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
@RequestParam(required = false, defaultValue = "1") Long channelId,
@RequestParam(required = false, defaultValue = "") String appChannel,
@RequestParam(required = false) Integer tenantId,
@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId,
HttpServletRequest request) {
//默认羊小咩租户
if (TenantUtil.validationTenantIdIsNullOrZero(tenantId)) {
......@@ -326,7 +329,7 @@ public class AppController implements IBaseController {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
log.info("第三方用户登录 [AppController] login2 --> loginFrom:{},channelId:{}, requestIp:{}", registerFrom, channelId, IpUtil.getRemoteIP(request));
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
......@@ -335,9 +338,9 @@ public class AppController implements IBaseController {
}
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, null, "", tenantId);
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGINTWO.ordinal());
AuthBean bean = sessionService.createSession(user, loginProperties, LoginType.SUPERLOGINTWO.ordinal(),tenantId);
// 不同渠道用户补签不同模板合同
userService.channelUserSignContract(user, registerFrom);
userService.channelUserSignContract(user, registerFrom,tenantId);
log.info("第三方用户登录成功 [AppController] login2 --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
return JsonResult.buildSuccessResult("登录成功", bean);
}
......
......@@ -100,7 +100,6 @@ public class InnerController implements IBaseController {
* 根据手机号或身份证号查询用户UUID
*
* @param phoneNo - 手机号
* @param idNo - 身份证号
* @return user表的uuid
* @yapi http://yapi.quantgroups.com/project/17/interface/api/187
* @Deprecated 20210318
......@@ -108,9 +107,10 @@ public class InnerController implements IBaseController {
@Deprecated
@IpValidator
@RequestMapping("/fetchUuid")
public JsonResult fetchUuid(String phoneNo, String idNo) {
String uuid = userService.findUuid(phoneNo, idNo);
log.info("根据手机号或身份证号查询用户UUID,phoneNo:{},idNo:{},uuid:{}", phoneNo, idNo, uuid);
public JsonResult fetchUuid(String phoneNo,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
String uuid = userService.findUuid(phoneNo,tenantId);
log.info("根据手机号或身份证号查询用户UUID,phoneNo:{},uuid:{}", phoneNo, uuid);
if (org.apache.commons.lang.StringUtils.isBlank(uuid)) {
return JsonResult.buildErrorStateResult("未找到该用户", null);
}
......@@ -122,7 +122,7 @@ public class InnerController implements IBaseController {
*/
@RequestMapping("/user/search/phoneNo")
public JsonResult findByPhoneNo(String phoneNo, Integer tenantId) {
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (user == null) {
return JsonResult.buildErrorStateResult("查无此人", null, 4L);
}
......@@ -135,7 +135,7 @@ public class InnerController implements IBaseController {
*/
@RequestMapping("/user/search/uuid")
public JsonResult findByUuidInfo(String uuid, Integer tenantId) {
User user = userService.findByUuidWithCache(uuid);
User user = userService.findByUuidWithCache(uuid,tenantId);
if (user == null) {
return JsonResult.buildErrorStateResult("查无此人", null);
}
......@@ -153,7 +153,7 @@ public class InnerController implements IBaseController {
if (StringUtils.isBlank(uuid)) {
return JsonResult.buildSuccessResult(null, null);
}
User user = userService.findByUuidWithCache(uuid);
User user = userService.findByUuidWithCache(uuid,tenantId);
if (null != user) {
if (!user.getEnable()) {
return JsonResult.buildSuccessResult(USER_ERROR_OR_ENABLE_ERROR, null);
......@@ -176,7 +176,7 @@ public class InnerController implements IBaseController {
if (StringUtils.isBlank(phone)) {
return JsonResult.buildSuccessResult(null, null);
}
User user = userService.findByPhoneInDb(phone);
User user = userService.findByPhoneInDb(phone,tenantId);
if (null != user) {
if (!user.getEnable()) {
return JsonResult.buildSuccessResult(USER_ERROR_OR_ENABLE_ERROR, null);
......@@ -227,7 +227,7 @@ public class InnerController implements IBaseController {
if (tenantId == null) {
tenantId = TenantUtil.TENANT_DEFAULT;
}
User user = userService.findByPhoneWithCache(phoneNo);
User user = userService.findByPhoneWithCache(phoneNo,tenantId);
if (user != null) {
//存在已注销
......@@ -280,7 +280,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("用户姓名错误.", null);
}
User user = userService.findById(userId);
User user = userService.findById(userId,tenantId);
if (Objects.isNull(user)) {
return JsonResult.buildErrorStateResult("用户不存在", null);
} else if (!Objects.equals(user.getPhoneNo(), phoneNo)) {
......@@ -339,7 +339,7 @@ public class InnerController implements IBaseController {
*/
@RequestMapping("/user/search/userId")
public JsonResult findUserByUserId(Long userId, Integer tenantId) {
User user = userService.findById(userId);
User user = userService.findById(userId,tenantId);
if (user != null) {
return JsonResult.buildSuccessResult(null, new UserRet(user));
}
......@@ -368,12 +368,12 @@ public class InnerController implements IBaseController {
* @return
*/
@RequestMapping("/user_full_info/search/phone")
public JsonResult findUserFullInfoByPhone(String phoneNo) {
public JsonResult findUserFullInfoByPhone(String phoneNo,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isBlank(phoneNo)) {
log.warn("[findUserFullInfoByPhone]phoneNo为空");
return JsonResult.buildErrorStateResult(null, null);
}
Optional<UserFullInfo> userFullInfoOptional = userApiService.getUserFullInfoByPhone(phoneNo);
Optional<UserFullInfo> userFullInfoOptional = userApiService.getUserFullInfoByPhone(phoneNo,tenantId);
if (!userFullInfoOptional.isPresent()) {
log.warn("[findUserFullInfoByPhone]没有用户信息,phoneNo={}", Md5Util.build(phoneNo));
return JsonResult.buildErrorStateResult(null, null);
......@@ -388,12 +388,12 @@ public class InnerController implements IBaseController {
* @return
*/
@RequestMapping("/user_full_info/search/uuid")
public JsonResult findUserFullInfoByUUuid(String uuid) {
public JsonResult findUserFullInfoByUUuid(String uuid,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isBlank(uuid)) {
log.warn("[findUserFullInfoByUUuid]uuid为空");
return JsonResult.buildErrorStateResult(null, null);
}
Optional<UserFullInfo> userFullInfoOptional = userApiService.getUserFullInfoByUuid(uuid);
Optional<UserFullInfo> userFullInfoOptional = userApiService.getUserFullInfoByUuid(uuid,tenantId);
if (!userFullInfoOptional.isPresent()) {
log.warn("[findUserFullInfoByUUuid]没有用户信息,uuid={}", uuid);
return JsonResult.buildErrorStateResult(null, null);
......@@ -434,11 +434,11 @@ public class InnerController implements IBaseController {
}
@RequestMapping("/user/query/openId")
public JsonResult queryOpenIdByUserId(Long userId) {
public JsonResult queryOpenIdByUserId(Long userId,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (userId == null) {
return JsonResult.buildErrorStateResult("userId不能为空", null);
}
WechatUserInfo wechatUserInfo = wechatService.queryByUserId(userId);
WechatUserInfo wechatUserInfo = wechatService.queryByUserId(userId,tenantId);
log.info("根据用户userId查询:微信关联:userId:{},WechatUserInfo:{}", userId, wechatUserInfo);
if (wechatUserInfo == null) {
return JsonResult.buildErrorStateResult(null, null);
......@@ -458,11 +458,11 @@ public class InnerController implements IBaseController {
public JsonResult findUserAssociationModel(Long id, String phoneNo, String uuid,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = null;
if (!Objects.isNull(id) && id > 0) {
user = userService.findById(id);
user = userService.findById(id,tenantId);
} else if (ValidationUtil.validatePhoneNo(phoneNo)) {
user = userService.findByPhoneWithCache(phoneNo);
user = userService.findByPhoneWithCache(phoneNo,tenantId);
} else if (StringUtils.isNotBlank(uuid)) {
user = userService.findByUuidWithCache(uuid);
user = userService.findByUuidWithCache(uuid,tenantId);
}
UserInfoEntity userDetail = null;
if (Objects.nonNull(user) && Objects.nonNull(user.getId()) && user.getId() > 0) {
......@@ -517,7 +517,7 @@ public class InnerController implements IBaseController {
String.valueOf(userId).concat(":").concat(phoneNo));
}
UserAssociationModel bean = null;
User user = userIdOk ? userService.findById(userId) : userService.findByPhoneWithCache(phoneNo);
User user = userIdOk ? userService.findById(userId,tenantId) : userService.findByPhoneWithCache(phoneNo,tenantId);
if (!Objects.isNull(user)) {
bean = findUserAssociationModelByUser(user,tenantId);
}
......@@ -569,12 +569,13 @@ public class InnerController implements IBaseController {
@RequestMapping("/user/wechat/phone_no")
public JsonResult queryOpenIdByPhoneNo(String phoneNo) {
public JsonResult queryOpenIdByPhoneNo(String phoneNo,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
,@RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号格式错误", null);
}
WechatUserInfo wechatUserInfo = wechatService.findWechatUserInfoByPhoneNo(phoneNo);
WechatUserInfo wechatUserInfo = wechatService.findWechatUserInfoByPhoneNo(phoneNo, tenantId);
return JsonResult.buildSuccessResult(null,
null == wechatUserInfo ? null : wechatUserInfo.getOpenId());
}
......@@ -586,12 +587,12 @@ public class InnerController implements IBaseController {
* @param enable - 用户激活状态
* @return
*/
private boolean flushUserStatus(Long userId, boolean enable) {
private boolean flushUserStatus(Long userId, boolean enable,Integer tenantId) {
if (null == userId || 0L == userId) {
log.info("刷新用户激活状态失败:userId:{},enable:{}", userId, enable);
return false;
}
User user = userService.findById(userId);
User user = userService.findById(userId,tenantId);
if (null == user) {
log.info("刷新用户激活状态失败:userId:{},enable:{},user:{}", userId, enable, user);
return false;
......@@ -600,17 +601,17 @@ public class InnerController implements IBaseController {
log.info("刷新用户激活状态失败:userId:{},enable:{},user:{}", userId, enable, user);
user = userService.saveUser(user);
if (!user.getEnable()) {
sessionService.deleteByUserId(userId);
sessionService.deleteUserCatch(user);
sessionService.deleteByUserId(userId,tenantId);
sessionService.deleteUserCatch(user,tenantId);
// 禁用微信
wechatService.forbiddenUserWeChat(userId);
wechatService.forbiddenUserWeChat(userId,tenantId);
}
applicationEventPublisher.publishEvent(new DisableActiveEvent(this, user));
return Objects.equals(enable, user.getEnable());
}
@RequestMapping("/user/findByPhones")
public JsonResult getUserIdByPhones(@RequestParam("userPhones") String userPhones) {
public JsonResult getUserIdByPhones(@RequestParam("userPhones") String userPhones, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isBlank(userPhones)) {
return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null);
}
......@@ -619,7 +620,7 @@ public class InnerController implements IBaseController {
if (!CollectionUtils.isEmpty(phones)) {
phones = phones.stream().filter(s -> StringUtils.isNotBlank(s)).collect(Collectors.toList());
if (phones.size() <= MAX_SIZE) {
List<User> users = userService.findByPhones(phones);
List<User> users = userService.findByPhones(phones,tenantId);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(users)) {
return JsonResult.buildSuccessResult(null,
users.stream().collect(Collectors.toMap(User::getPhoneNo, User::getId)));
......@@ -677,7 +678,8 @@ public class InnerController implements IBaseController {
public JsonResult saveMulti(String registeredFrom, String channelId, String phoneNo, String name,
String idNo, String provinceCode, String province, String cityCode, String city,
String districtCode, String district, String address, String contacts,
@RequestParam(defaultValue = "0", required = false) Long btRegisterChannelId) {
@RequestParam(defaultValue = "0", required = false) Long btRegisterChannelId
, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (!NumberUtils.isDigits(registeredFrom)) {
return JsonResult.buildErrorStateResult("注册渠道异常.", null);
}
......@@ -714,7 +716,7 @@ public class InnerController implements IBaseController {
}
channelId = MoreObjects.firstNonNull(channelId, "-1");
// 验证用户是否已存在
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (null != user) {
return JsonResult.buildErrorStateResult("用户已存在,手机号被占用", null);
}
......@@ -727,11 +729,11 @@ public class InnerController implements IBaseController {
//根据日期时间段查询新注册用户信息并返回
@RequestMapping("/contract/queryRegisterUsers")
public JsonResult findRegisterUserByTime(String beginTime, String endTime) {
public JsonResult findRegisterUserByTime(String beginTime, String endTime, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (null == beginTime || endTime == null) {
return JsonResult.buildErrorStateResult(null, null);
}
List<User> userList = userService.findRegisterUserByTime(beginTime, endTime);
List<User> userList = userService.findRegisterUserByTime(beginTime, endTime,tenantId);
return JsonResult.buildSuccessResult(null, userList);
}
......@@ -750,7 +752,8 @@ public class InnerController implements IBaseController {
@RequestParam(required = false, defaultValue = "1") Long createdFrom,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) Long btRegisterChannelId,
@RequestParam(required = false) String dimension) {
@RequestParam(required = false) String dimension , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
log.info(
"/innerapi/verifyPhoneAndCode -> phoneNo:{},verificationCode:{},channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{}",
phoneNo, verificationCode, channelId, appChannel, createdFrom, btRegisterChannelId, key,
......@@ -774,7 +777,7 @@ public class InnerController implements IBaseController {
log.info("验证码校验失败,phoneNo:{} , verificationCode:{}", phoneNo, verificationCode);
return JsonResult.buildErrorStateResult("短信验证码错误", "");
}
User user = userService.findByPhoneWithCache(phoneNo);
User user = userService.findByPhoneWithCache(phoneNo,tenantId);
// 检查用户有效性
if (user != null && !user.getEnable()) {
log.error("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
......@@ -796,8 +799,8 @@ public class InnerController implements IBaseController {
}
@RequestMapping("/login")
public JsonResult login(@RequestParam String phoneNo, @RequestParam String password) {
User user = checkPhoneNoAndPassword(phoneNo, password);
public JsonResult login(@RequestParam String phoneNo, @RequestParam String password , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = checkPhoneNoAndPassword(phoneNo, password,tenantId);
if (user == null) {
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
}
......@@ -805,7 +808,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildSuccessResult("校验成功", model);
}
private User checkPhoneNoAndPassword(String phoneNo, String password) {
private User checkPhoneNoAndPassword(String phoneNo, String password,Integer tenantId) {
byte[] byPhoneNo = Base64.decodeBase64(phoneNo);
String bufPhoneNo = "";
try {
......@@ -824,7 +827,7 @@ public class InnerController implements IBaseController {
} catch (UnsupportedEncodingException e) {
log.error("不支持的编码: ", e);
}
User user = userService.findByPhoneWithCache(bufPhoneNo);
User user = userService.findByPhoneWithCache(bufPhoneNo,tenantId);
if (Objects.isNull(user) || Objects.equals(Boolean.FALSE, user.getEnable())) {
return null;
}
......@@ -853,11 +856,11 @@ public class InnerController implements IBaseController {
* @return
*/
@RequestMapping("/user/enable")
public JsonResult isEnable(String phoneNo) {
public JsonResult isEnable(String phoneNo , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
boolean flag = false;
Map validMap = Maps.newHashMap();
validMap.put("valid", flag);
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (user != null && user.getEnable()) {
validMap.put("valid", true);
validMap.put("id", user.getId());
......@@ -874,9 +877,10 @@ public class InnerController implements IBaseController {
* @return
*/
@RequestMapping(path = "/user/active", method = RequestMethod.POST)
public JsonResult activeUser(Long userId,
public JsonResult activeUser(Long userId
, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId,
@RequestHeader(value = "Access-Token", required = false) String accessToken) {
boolean flushed = flushUserStatus(userId, true);
boolean flushed = flushUserStatus(userId, true,tenantId);
UserDisableRecord userDisableRecord = new UserDisableRecord();
userDisableRecord.setUserId(userId);
if (StringUtils.isNotEmpty(accessToken)) {
......@@ -898,9 +902,10 @@ public class InnerController implements IBaseController {
*/
@RequestMapping(path = "/user/disable", method = RequestMethod.POST)
public JsonResult forbiddenUser(Long userId,
@Length(max = 10, message = "原因不能大于10个字符") String reason,
@Length(max = 10, message = "原因不能大于10个字符") String reason
, @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId,
@RequestHeader(value = "Access-Token", required = false) String accessToken) {
boolean flushed = flushUserStatus(userId, false);
boolean flushed = flushUserStatus(userId, false,tenantId);
UserDisableRecord userDisableRecord = new UserDisableRecord();
userDisableRecord.setUserId(userId);
if (StringUtils.isNotEmpty(accessToken)) {
......@@ -950,7 +955,7 @@ public class InnerController implements IBaseController {
*/
@RequestMapping(path = "/user/password/reset", method = RequestMethod.POST)
public JsonResult resetPassword(@RequestParam("phone") String phone,
@RequestParam(required = false) String password) {
@RequestParam(required = false) String password , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (ValidationUtil.validatePhoneNo(phone)) {
// 默认重置的密码是123456
if (StringUtils.isBlank(password)) {
......@@ -959,7 +964,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult(PasswordUtil.TOAST_MSG, null);
}
try {
boolean result = userService.resetPassword(phone, password);
boolean result = userService.resetPassword(phone, password,tenantId);
log.info("重置用户密码,phoneNo:[{}],password:[{}],result:[{}]", phone, password, result);
if (result) {
return JsonResult.buildSuccessResult("用户密码已重置.", password);
......@@ -976,13 +981,13 @@ public class InnerController implements IBaseController {
*/
@RequestMapping("/user/password/reset/{key}/{phone}")
public JsonResult resetPasswordByKey(@PathVariable("key") String key,
@PathVariable("phone") String phone) {
@PathVariable("phone") String phone , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
log.info("密码重置请求,phone:[{}]", phone);
if (!RESET_PWD_TOKEN.equalsIgnoreCase(key)) {
log.error("密码重置失败,key错误!@!,phone:[{}]", phone);
return JsonResult.buildErrorStateResult("用户密码重置失败.", HttpStatus.SC_UNAUTHORIZED);
}
return resetPassword(phone, null);
return resetPassword(phone, null,tenantId);
}
/**
......@@ -996,7 +1001,7 @@ public class InnerController implements IBaseController {
*/
@RequestMapping("/forbiddenUserOrNot")
public JsonResult forbiddenUserOrNot(@RequestParam String phoneNo, @RequestParam Boolean enable,
@RequestParam String reason, @RequestParam String content) {
@RequestParam String reason, @RequestParam String content , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isBlank(phoneNo) || StringUtils.isBlank(reason)) {
return JsonResult.buildErrorStateResult("参数有误", null);
}
......@@ -1014,14 +1019,14 @@ public class InnerController implements IBaseController {
log.info("[forbiddenUserOrNot][禁用或激活用户]:用户手机号错误, phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("用户手机号错误", null);
}
int affectedRows = userService.forbiddenUser(enable, phoneNo);
int affectedRows = userService.forbiddenUser(enable, phoneNo,tenantId);
// 清除缓存,解除微信关联
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (null != user && !user.getEnable()) {
sessionService.deleteByUserId(user.getId());
sessionService.deleteUserCatch(user);
sessionService.deleteByUserId(user.getId(),tenantId);
sessionService.deleteUserCatch(user,tenantId);
// 禁用微信
wechatService.forbiddenUserWeChat(user.getId());
wechatService.forbiddenUserWeChat(user.getId(),tenantId);
}
log.info(
"[forbiddenUserOrNot][禁用或激活用户]:理由:reason:{},手机号phoneNo:{},受影响的行数affectedRows:{}",
......@@ -1039,7 +1044,7 @@ public class InnerController implements IBaseController {
*/
@RequestMapping("/forbiddenUserWeChat")
public JsonResult forbiddenUserWeChat(@RequestParam Long userId, @RequestParam String reason,
@RequestParam String content) {
@RequestParam String content,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isBlank(reason) || null == userId || userId <= 0) {
return JsonResult.buildErrorStateResult("参数有误", null);
}
......@@ -1051,7 +1056,7 @@ public class InnerController implements IBaseController {
if (null == str || !str.equals(userId.toString())) {
return JsonResult.buildErrorStateResult("解密有误", null);
}
int affectedRows = wechatService.forbiddenUserWeChat(userId);
int affectedRows = wechatService.forbiddenUserWeChat(userId,tenantId);
log.info("用户微信禁用,userId:{},禁用的原因reason:{},受影响的行数affectedRows:{}", userId,
reason, affectedRows);
return JsonResult.buildSuccessResult("用户禁用微信成功", affectedRows);
......@@ -1063,8 +1068,8 @@ public class InnerController implements IBaseController {
}
@RequestMapping("/delete/session")
public JsonResult deleteSession(Long userId) {
sessionService.deleteByUserId(userId);
public JsonResult deleteSession(Long userId , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
sessionService.deleteByUserId(userId,tenantId);
return JsonResult.buildSuccessResult();
}
......@@ -1075,12 +1080,12 @@ public class InnerController implements IBaseController {
* @return 销户结果
*/
@GetMapping("/user/delete/{userId}")
public JsonResult<?> deregister(@NotNull @PathVariable("userId") Long userId) {
public JsonResult<?> deregister(@NotNull @PathVariable("userId") Long userId , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
log.info("用户id[{}], 销户开始", userId);
/* 执行销户 */
userService.deregister(userId);
userService.deregister(userId,tenantId);
log.info("用户id[{}], 销户成功", userId);
return JsonResult.buildSuccessResult("用户销户成功", true);
......
......@@ -55,7 +55,7 @@ public class SyncUserController {
return JsonResult.buildErrorStateResult("姓名错误", name);
}
User user = userService.findByPhoneWithCache(phoneNo);
User user = userService.findByPhoneWithCache(phoneNo,tenantId);
if (Objects.isNull(user)) {
log.error("用户不存在,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("用户不存在", phoneNo);
......@@ -95,7 +95,7 @@ public class SyncUserController {
if (!Objects.equals(KEY, key) || !ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
}
User user = userService.findByPhoneInDb(phoneNo);
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (Objects.isNull(user)) {
return JsonResult.buildErrorStateResult(null, null);
}
......@@ -112,7 +112,7 @@ public class SyncUserController {
if (StringUtils.isEmpty(uuid)) {
return JsonResult.buildErrorStateResult(null, null);
}
User user = userService.findByUuidWithCache(uuid);
User user = userService.findByUuidWithCache(uuid,tenantId);
if (null == user) {
return JsonResult.buildErrorStateResult(null, null);
}
......
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.model.JsonResult;
......@@ -39,11 +40,11 @@ public class UserApiController {
private ISmsService smsService;
@RequestMapping("/user/is_passwd_set")
public JsonResult isPasswordSet(String phoneNo) {
public JsonResult isPasswordSet(String phoneNo , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
}
User user = userService.findByPhoneWithCache(phoneNo);
User user = userService.findByPhoneWithCache(phoneNo,tenantId);
if (null == user) {
return JsonResult.buildErrorStateResult(null, null);
}
......@@ -66,7 +67,7 @@ public class UserApiController {
public JsonResult checkToken(
@PathVariable("token") String token,
@RequestParam(name = "prolong", required = false, defaultValue = "false") Boolean prolong,
@RequestParam(name = "prolongTime", required = false, defaultValue = "86400") Long prolongTime) {
@RequestParam(name = "prolongTime", required = false, defaultValue = "86400") Long prolongTime , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (Objects.isNull(token) || !ValidationUtil.validateToken(token)) {
return JsonResult.buildErrorStateResult("token regular invalid ", token);
}
......@@ -86,7 +87,7 @@ public class UserApiController {
} else {
/* 延续session生命期 */
try {
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues(), prolongTime);
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues(), prolongTime,tenantId);
log.info("延续token:[{}]生命期,result:[{}]", token, true);
} finally {
XyqbSessionContextHolder.releaseSession();
......
......@@ -82,12 +82,12 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/queryNick")
public JsonResult queryUserNick(String phoneNo) {
public JsonResult queryUserNick(String phoneNo , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isEmpty(phoneNo)) {
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
Long userId = queryUserId(phoneNo,tenantId);
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
......@@ -107,12 +107,12 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/saveNick")
public JsonResult saveUserNick(String phoneNo, String nick) {
public JsonResult saveUserNick(String phoneNo, String nick , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isEmpty(phoneNo)) {
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
Long userId = queryUserId(phoneNo,tenantId);
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
......@@ -154,12 +154,12 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/save/avatar")
public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl) {
public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isBlank(avatarUrl) || StringUtils.isBlank(phoneNo)) {
log.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
Long userId = queryUserId(phoneNo,tenantId);
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
......@@ -186,7 +186,7 @@ public class UserCenterController {
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
Long userId = queryUserId(phoneNo,tenantId);
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
......@@ -207,12 +207,12 @@ public class UserCenterController {
@AccessForbiddenValidator
@PasswordFreeAccessValidator
@RequestMapping("/personalData")
public JsonResult personalData(String phoneNo) {
public JsonResult personalData(String phoneNo , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
if (StringUtils.isBlank(phoneNo)) {
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
Long userId = queryUserId(phoneNo,tenantId);
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
......@@ -229,8 +229,8 @@ public class UserCenterController {
* @param phoneNo
* @return
*/
private Long queryUserId(String phoneNo) {
User user = userService.findByPhoneInDb(phoneNo);
private Long queryUserId(String phoneNo,Integer tenantId) {
User user = userService.findByPhoneInDb(phoneNo,tenantId);
return null == user ? null : user.getId();
}
......
package cn.quantgroup.xyqb.controller.middleoffice.applet;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.controller.middleoffice.login.ILoginModule;
import cn.quantgroup.xyqb.controller.middleoffice.login.LoginVo;
import cn.quantgroup.xyqb.entity.middleoffice.AppletParamEntry;
......@@ -64,12 +65,12 @@ public class AppletController {
*/
@Validated
@PostMapping("/login")
public JsonResult login(@RequestParam String appName, @RequestParam String openId, @RequestParam(required = false) Integer tenantId, String utmSource, @RequestParam(required = false) Integer appNo, @RequestParam(required = false) String unionId) {
public JsonResult login(@RequestParam String appName, @RequestParam String openId, @RequestParam(required = false) Integer tenantId, String utmSource, @RequestParam(required = false) Integer appNo, @RequestParam(required = false) String unionId, @RequestParam(value = "appId",defaultValue = UserConstant.defaultAppId) String appId) {
if (!containsAppName(appName)) {
throw new DataException("appName不合法");
}
LoginVo login = iAppletService.login(appName, openId, tenantId, utmSource, unionId);
LoginVo login = iAppletService.login(appName, openId, tenantId, utmSource, unionId,appId);
return JsonResult.buildSuccessResultGeneric(login);
}
......
......@@ -7,9 +7,9 @@ public interface ILoginModule {
LoginVo login(VerifyTypeEnum type, Boolean reg,
Long channelId, String appChannel,
String wechatOpenId, String phoneNo,
String verify);
String verify,Integer tenantId);
Boolean modifyPwd(VerifyTypeEnum type, String phoneNo, String password, String verify);
Boolean modifyPwd(VerifyTypeEnum type, String phoneNo, String password, String verify,Integer tenantId);
LoginVo loginByUserId(Long channelId, String appChannel, Long userId, Integer tenantId);
}
package cn.quantgroup.xyqb.controller.middleoffice.login;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.controller.middleoffice.common.VerifyTypeEnum;
import cn.quantgroup.xyqb.model.JsonResult;
import lombok.extern.slf4j.Slf4j;
......@@ -26,21 +27,21 @@ public class LoginController {
@RequestParam(required = false) String appChannel,
@RequestParam(required = false) String wechatOpenId,
@RequestParam String phoneNo,
@RequestParam(required = false) String verify
@RequestParam(required = false) String verify,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId
) {
LoginVo login = loginModule.login(type, autoReg, channelId, appChannel, wechatOpenId, phoneNo, verify);
LoginVo login = loginModule.login(type, autoReg, channelId, appChannel, wechatOpenId, phoneNo, verify,tenantId);
return JsonResult.buildSuccessResultGeneric(login);
}
@PatchMapping("/modify/pwd")
public JsonResult modifyByPwd(String phoneNo, String password, String passwordNew) {
loginModule.modifyPwd(VerifyTypeEnum.pwd, phoneNo, password, passwordNew);
public JsonResult modifyByPwd(String phoneNo, String password, String passwordNew,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
loginModule.modifyPwd(VerifyTypeEnum.pwd, phoneNo, password, passwordNew,tenantId);
return JsonResult.buildSuccessResult();
}
@PatchMapping("/modify/sms")
public JsonResult modifyBySms(String phoneNo, String password, String verificationCode) {
loginModule.modifyPwd(VerifyTypeEnum.sms, phoneNo, password, verificationCode);
public JsonResult modifyBySms(String phoneNo, String password, String verificationCode,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
loginModule.modifyPwd(VerifyTypeEnum.sms, phoneNo, password, verificationCode,tenantId);
return JsonResult.buildSuccessResult();
}
......
......@@ -35,8 +35,8 @@ public class LoginModule implements ILoginModule {
private ISessionService sessionService;
@Override
public LoginVo login(VerifyTypeEnum type, Boolean reg, Long channelId, String appChannel, String wechatOpenId, String phoneNo, String verify) {
User user = userService.findByPhoneInDb(phoneNo);
public LoginVo login(VerifyTypeEnum type, Boolean reg, Long channelId, String appChannel, String wechatOpenId, String phoneNo, String verify,Integer tenantId) {
User user = userService.findByPhoneInDb(phoneNo,tenantId);
boolean autoReg = reg && type != VerifyTypeEnum.pwd;
//auto reg
if (user == null) {
......@@ -64,7 +64,7 @@ public class LoginModule implements ILoginModule {
.channelId(channelId)
.merchantName("xyqb")
.build();
AuthBean session = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal());
AuthBean session = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(),tenantId);
return LoginVo.builder()
.hasPassword(user.getHasPassword())
.phoneNo(phoneNo)
......@@ -74,20 +74,20 @@ public class LoginModule implements ILoginModule {
}
@Override
public Boolean modifyPwd(VerifyTypeEnum type, String phoneNo, String password, String verify) {
User user = userService.findByPhoneInDb(phoneNo);
public Boolean modifyPwd(VerifyTypeEnum type, String phoneNo, String password, String verify,Integer tenantId) {
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (user == null) {
//todo 自定义异常
throw new DataException("用户不存在");
}
VerifyStrategyFactory.get(type).verify(user, verify);
userService.resetPassword(phoneNo, password);
userService.resetPassword(phoneNo, password,tenantId);
return true;
}
@Override
public LoginVo loginByUserId(Long channelId, String appChannel, Long userId, Integer tenantId) {
User user = userService.findById(userId);
User user = userService.findById(userId,tenantId);
if(null == user){
throw new DataException("未找到此用户");
}
......@@ -97,7 +97,7 @@ public class LoginModule implements ILoginModule {
.channelId(channelId)
.tenantId(tenantId)
.build();
AuthBean session = sessionService.createSession(user, loginProperties, LoginType.APPLETLOGIN.ordinal());
AuthBean session = sessionService.createSession(user, loginProperties, LoginType.APPLETLOGIN.ordinal(),tenantId);
return LoginVo.builder()
.hasPassword(user.getHasPassword())
.phoneNo(user.getPhoneNo())
......
package cn.quantgroup.xyqb.controller.middleoffice.user;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.event.DisableActiveEvent;
import cn.quantgroup.xyqb.model.JsonResult;
......@@ -34,8 +35,8 @@ public class UserController {
private ISessionService sessionService;
@PutMapping("/enable/{userId}")
public JsonResult enable(@PathVariable Long userId) {
User user = userService.findById(userId);
public JsonResult enable(@PathVariable Long userId , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = userService.findById(userId,tenantId);
if (user == null) {
//todo 用户不存在,怎么处理
return JsonResult.buildSuccessResult();
......@@ -48,8 +49,8 @@ public class UserController {
}
@PutMapping("/disable/{userId}")
public JsonResult disable(@PathVariable Long userId) {
User user = userService.findById(userId);
public JsonResult disable(@PathVariable Long userId , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = userService.findById(userId,tenantId);
if (user == null) {
//todo 用户不存在,怎么处理
return JsonResult.buildSuccessResult();
......@@ -59,7 +60,7 @@ public class UserController {
userService.saveUser(user);
// 清除token缓存
/* 清空session */
sessionService.deleteByUserId(user.getId());
sessionService.deleteByUserId(user.getId(),tenantId);
//通知消息中心
applicationEventPublisher.publishEvent(new DisableActiveEvent(this, user));
......@@ -67,23 +68,23 @@ public class UserController {
}
@GetMapping("/userId/{userId}")
public JsonResult user(@PathVariable Long userId) {
User user = userService.findById(userId);
public JsonResult user(@PathVariable Long userId , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = userService.findById(userId,tenantId);
//TODO convert to userVO
return JsonResult.buildSuccessResultGeneric(user);
}
@GetMapping("/phoneNo/{phoneNo}")
public JsonResult user(@PathVariable String phoneNo) {
User user = userService.findByPhoneInDb(phoneNo);
public JsonResult user(@PathVariable String phoneNo , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = userService.findByPhoneInDb(phoneNo,tenantId);
//TODO convert to userVO
return JsonResult.buildSuccessResultGeneric(user);
}
@GetMapping("/uuid/{uuid}")
public JsonResult uuid(@PathVariable String uuid) {
User user = userService.findByUuidWithCache(uuid);
public JsonResult uuid(@PathVariable String uuid , @RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = userService.findByUuidWithCache(uuid,tenantId);
//TODO convert to userVO
return JsonResult.buildSuccessResultGeneric(user);
}
......
......@@ -63,7 +63,7 @@ public class UserDetailController {
if (userDetail != null) {
return JsonResult.buildSuccessResultGeneric(userDetail);
}
User user = userService.findById(userId);
User user = userService.findById(userId,tenantId);
userDetail = new UserInfoEntity();
userDetail.setUserId(userId);
......
package cn.quantgroup.xyqb.controller.middleoffice.wx;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.user.IUserService;
......@@ -36,7 +37,7 @@ public class WxController {
@GetMapping("/userId/{userId}")
public JsonResult openId(@PathVariable Long userId, @RequestParam(required = false) Integer tenantId) {
String openId = null;
WechatUserInfo wechatUserInfo = wechatService.queryByUserId(userId);
WechatUserInfo wechatUserInfo = wechatService.queryByUserId(userId,tenantId);
if (wechatUserInfo != null) {
openId = wechatUserInfo.getOpenId();
}
......@@ -52,7 +53,7 @@ public class WxController {
*/
@GetMapping("/userId/{userId}/{appName}")
public JsonResult openId(@PathVariable Long userId, @PathVariable String appName, @RequestParam(required = false) Integer tenantId) {
WechatUserInfo wechatUserInfo = wechatService.queryByUserId(userId, appName);
WechatUserInfo wechatUserInfo = wechatService.queryByUserId(userId, tenantId);
if (wechatUserInfo == null) {
return JsonResult.buildSuccessResult();
}
......@@ -67,7 +68,7 @@ public class WxController {
*/
@GetMapping("/phoneNo/{phoneNo}")
public JsonResult openId(@PathVariable String phoneNo, @RequestParam(required = false) Integer tenantId) {
WechatUserInfo wechatUserInfo = wechatService.findWechatUserInfoByPhoneNo(phoneNo);
WechatUserInfo wechatUserInfo = wechatService.findWechatUserInfoByPhoneNo(phoneNo,tenantId);
if (wechatUserInfo == null) {
return JsonResult.buildSuccessResult();
}
......@@ -81,8 +82,8 @@ public class WxController {
}
@PatchMapping("/forbidden/{userId}")
public JsonResult forbidden(@PathVariable Long userId, String reason) {
int res = wechatService.forbiddenUserWeChat(userId);
public JsonResult forbidden(@PathVariable Long userId, String reason,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
int res = wechatService.forbiddenUserWeChat(userId,tenantId);
log.info("取消微信关联 userId:{},reason:{},结果:{}", userId, reason, res);
return JsonResult.buildSuccessResultGeneric(res);
}
......@@ -91,7 +92,7 @@ public class WxController {
*
*/
@PostMapping("/v1/getByOpenIdToUserIds")
public JsonResult getByOpenIdToUserIds(@RequestBody Map<String, Object> params, @RequestParam(required = false, defaultValue = "wuxi") String appName) {
public JsonResult getByOpenIdToUserIds(@RequestBody Map<String, Object> params, @RequestParam(required = false, defaultValue = "wuxi") String appName,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
log.info("根据userIds获取用户的openId {}, appName:{}", params, appName);
List<Integer> userIds = (List<Integer>) params.get("userIds");
if (userIds.isEmpty()) {
......@@ -102,7 +103,7 @@ public class WxController {
}
List<Long> userIdList = userIds.stream().map(userId -> Long.parseLong(userId.toString())).collect(Collectors.toList());
List<WechatUserInfo> wechatUserInfoList = wechatService.queryByUserIdsAndAppName(userIdList, appName);
List<WechatUserInfo> wechatUserInfoList = wechatService.queryByUserIdsAndAppName(userIdList, appName,tenantId);
if (wechatUserInfoList.isEmpty()) {
return JsonResult.buildSuccessResult();
}
......
package cn.quantgroup.xyqb.controller.modifyphoneno;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.controller.modifyphoneno.req.*;
import cn.quantgroup.xyqb.controller.modifyphoneno.req.ModifyPhoneRecord.UserClient;
......@@ -51,12 +52,12 @@ public class ModifyPhoneNoController implements IBaseController {
* @return
*/
@PostMapping("/step_1")
public JsonResult step1(@Valid @RequestBody Step1Req step1Req) {
public JsonResult step1(@Valid @RequestBody Step1Req step1Req,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
User user = getCurrentUserFromRedis();
if (user == null) {
return JsonResult.buildErrorStateResult("系统错误", null);
}
return JsonResult.buildSuccessResultGeneric(modifyPhoneNoService.saveStep1(user.getId(), step1Req));
return JsonResult.buildSuccessResultGeneric(modifyPhoneNoService.saveStep1(user.getId(), step1Req,tenantId));
}
/**
......@@ -91,8 +92,8 @@ public class ModifyPhoneNoController implements IBaseController {
* 后台客服处理功能 - 人工审核
*/
@PostMapping("/audit")
public JsonResult audit(@Valid @RequestBody AuditReq auditReq) {
modifyPhoneNoService.audit(auditReq);
public JsonResult audit(@Valid @RequestBody AuditReq auditReq,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId) {
modifyPhoneNoService.audit(auditReq,tenantId);
return JsonResult.buildSuccessResult();
}
......@@ -161,8 +162,8 @@ public class ModifyPhoneNoController implements IBaseController {
}
@PostMapping("/rejectReason/save")
public JsonResult saveRejectReason(@Valid @RequestBody ModifyRejectRecord modifyRejectRecord){
modifyPhoneNoService.saveRejectReason(modifyRejectRecord);
public JsonResult saveRejectReason(@Valid @RequestBody ModifyRejectRecord modifyRejectRecord,@RequestParam(value = "tenantId",defaultValue = UserConstant.defaultTenantIdString) Integer tenantId){
modifyPhoneNoService.saveRejectReason(modifyRejectRecord,tenantId);
return JsonResult.buildSuccessResult("保存手机号修改失败原因成功");
}
......
......@@ -39,6 +39,8 @@ public class ModifyPhoneRecord implements Serializable {
*/
private ApplySource applySource;
private Integer tenantId;
public interface Background{}
public interface UserClient{}
public interface Finance{}
......
......@@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import javax.persistence.*;
import java.io.Serializable;
......@@ -48,6 +49,10 @@ public class User extends BaseEntity implements Serializable {
@Column(name = "cipher_password")
private String cipherPassword;
@Column(name = "password_type")
private Integer passwordType;
@Column(name = "tenant_id")
private Integer tenantId;
......
......@@ -53,6 +53,19 @@ public class WechatUserInfo extends BaseEntity implements Serializable {
@Convert(converter = EncryptConverter.class)
private String encryptedPhoneNo;
@Column(name = "session_key")
private String sessionKey;
@Column(name = "app_id")
private String appId;
@Column(name = "tenant_id")
private Integer tenantId;
//第一次用户来源 channel_id
@Column(name = "registered_from")
private Long registeredFrom;
public String getEncryptedPhoneNo() {
return StringUtils.isBlank(encryptedPhoneNo) ? phoneNo : encryptedPhoneNo;
}
......
......@@ -76,6 +76,8 @@ public class AppletParamEntry {
*/
private String utmSource;
private String appId;
/**
* 租户ID
*/
......
......@@ -61,6 +61,6 @@ public class BlackHoleRegisteredEventListener implements ApplicationListener<Reg
array.toString());
});
// 不同渠道签署不同的合同模板
userService.channelUserSignContract(user, null);
userService.channelUserSignContract(user, null, user.getTenantId());
}
}
......@@ -30,9 +30,9 @@ public class CacheEvictPhoneNoUpdateEventListener implements ApplicationListener
String oldPhoneNo = event.getOldPhoneNo();
User user = event.getUser();
userService.userCacheEvict(user.getUuid(), oldPhoneNo);
userService.userCacheEvict(user.getUuid(), oldPhoneNo,user.getTenantId());
List<SessionStruct> sessionStructList = sessionService.findByUserId(user.getId());
List<SessionStruct> sessionStructList = sessionService.findByUserId(user.getId(),user.getTenantId());
sessionStructList = sessionStructList.stream().filter(Objects::nonNull).collect(Collectors.toList());
......@@ -50,7 +50,7 @@ public class CacheEvictPhoneNoUpdateEventListener implements ApplicationListener
}
values.setUser(sessionUser);
}
sessionService.persistSession(sessionStructList);
sessionService.persistSession(sessionStructList,user.getTenantId());
}
}
......@@ -30,7 +30,7 @@ public class NotifyWechatBindEventListener implements ApplicationListener<Wechat
log.info("微信绑定数据,没有用户 ID 信息,openId:{}", wechatEventMsg.getOpenId());
return;
}
User user = userRepository.findById(wechatEventMsg.getUserId());
User user = userRepository.findByIdAndTenantId(wechatEventMsg.getUserId(),wechatEventMsg.getTenantId());
if (user == null) {
log.info("微信绑定数据,没有用户信息,openId:{},userId:{}", wechatEventMsg.getOpenId(), wechatEventMsg.getUserId());
return;
......
......@@ -21,7 +21,7 @@ public class WechatPhoneNoUpdateEventListener implements ApplicationListener<Pho
public void onApplicationEvent(PhoneNoUpdateEvent event) {
String oldPhoneNo = event.getOldPhoneNo();
User user = event.getUser();
WechatUserInfo userInfo = wechatService.findWechatUserInfoByPhoneNo(oldPhoneNo);
WechatUserInfo userInfo = wechatService.findWechatUserInfoByPhoneNo(oldPhoneNo, user.getTenantId());
if (Objects.isNull(userInfo)) {
return;
}
......
......@@ -59,7 +59,7 @@ public class RequestFilter implements Filter {
} else {
/* 延续session生命期 */
try {
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues());
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues(),sessionStruct.getTenantId());
} finally {
XyqbSessionContextHolder.releaseSession();
}
......
......@@ -17,6 +17,7 @@ public class SessionStruct implements Serializable {
private String sid;
private SessionValue values;
private long expire;
private Integer tenantId;
public void setAttribute(String key, String value) {
if (value == null) {
......
......@@ -3,9 +3,12 @@ package cn.quantgroup.xyqb.model.webchat;
import lombok.Builder;
import lombok.Data;
import javax.persistence.criteria.CriteriaBuilder;
@Data
@Builder
public class WechatEventMsg {
private Long userId;
private String openId;
private Integer tenantId;
}
......@@ -15,11 +15,11 @@ import java.util.List;
*/
public interface IUserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
User findByPhoneNo(String phoneNo);
User findByPhoneNoAndTenantId(String phoneNo,Integer tenantId);
User findByEncryptedPhoneNo(String phoneNo);
User findByEncryptedPhoneNoAndTenantId(String phoneNo,Integer tenantId);
User findByUuid(String uuid);
User findByUuidAndTenantId(String uuid,Integer tenantId);
/**
* 根据手机号查询用户UUID
......@@ -27,39 +27,31 @@ public interface IUserRepository extends JpaRepository<User, Long>, JpaSpecifica
* @param phoneNo - 手机号
* @return user表的uuid
*/
@Query(value = "select uuid from user where phone_no=?1", nativeQuery = true)
String findUuidByPhoneNo(String phoneNo);
@Query(value = "select uuid from user where phone_no=?1 and tenant_id=?2", nativeQuery = true)
String findUuidByPhoneNoAndTenantId(String phoneNo,Integer tenantId);
/**
* 根据身份证号查询用户UUID
*
* @param idNo - 身份证号
* @return user表的uuid
*/
@Query(value = "select uuid from user where id=(select user_id from user_detail where id_no=?1) ", nativeQuery = true)
String findUuidByIdNo(String idNo);
List<User> findByIdIn(List<Long> ids);
List<User> findByIdInAndTenantId(List<Long> ids,Integer tenantId);
User findById(Long id);
User findByIdAndTenantId(Long id,Integer tenantId);
@Query(value = "select * from user where created_at>=?1 and created_at<?2 ", nativeQuery = true)
List<User> findRegisterUserByTime(String beginTime, String endTime);
@Query(value = "select * from user where created_at>=?1 and created_at<?2 and tenant_id=?3 ", nativeQuery = true)
List<User> findRegisterUserByTimeAndTenantId(String beginTime, String endTime,Integer tenantId);
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update user set enable=?1 where phone_no=?2", nativeQuery = true)
int forbiddenUser(Boolean enable, String phoneNo);
@Query(value = "update user set enable=?1 where phone_no=?2 and tenant_id=?3", nativeQuery = true)
int forbiddenUserAndTenantId(Boolean enable, String phoneNo,Integer tenantId);
List<User> findByIdBetween(Long id, Long endId);
List<User> findByIdBetweenAndTenantId(Long id, Long endId,Integer tenantId);
List<User> findByUuidIn(List<String> uuids);
List<User> findByUuidInAndTenantId(List<String> uuids,Integer tenantId);
/**
* 根据userId删除用户
*
* @param userId 用户id
*/
void deleteById(Long userId);
void deleteByIdAndTenantId(Long userId,Integer tenantId);
}
......@@ -16,17 +16,17 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY;
* modify by djh 20200527 http://confluence.quantgroup.cn/pages/viewpage.action?pageId=30657427
*/
public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Long> {
WechatUserInfo findByOpenIdAndAppName(String openId, String appName);
WechatUserInfo findByOpenIdAndAppNameAndAppIdAndTenantId(String openId, String appName,String appId,Integer tenantId);
WechatUserInfo findByPhoneNoAndAppName(String phoneNo, String appName);
WechatUserInfo findByPhoneNoAndAppNameAndTenantId(String phoneNo, String appName, Integer tenantId);
WechatUserInfo findByEncryptedPhoneNoAndAppName(String phoneNo, String appName);
WechatUserInfo findByEncryptedPhoneNoAndAppNameAndTenantId(String phoneNo, String appName, Integer tenantId);
WechatUserInfo findByUserIdAndAppName(Long userId, String appName);
WechatUserInfo findByUserIdAndAppNameAndAppIdAndTenantId(Long userId, String appName,String appId,Integer tenantId);
WechatUserInfo findFirstByUserIdAndAppNameOrderByCreatedAtDesc(Long userId, String appName);
WechatUserInfo findFirstByUserIdAndAppNameAndTenantIdOrderByCreatedAtDesc(Long userId, String appName, Integer tenantId);
long countByOpenIdAndAppName(String openId, String appName);
long countByOpenIdAndAppNameAndAppIdAndTenantId(String openId, String appName,String appId,Integer tenantId);
/**
* 解除关联关系 -- 当前用户的已关联微信
......@@ -37,8 +37,8 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
*/
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1 and app_name=?2", nativeQuery = true)
int dissociateByUserIdAndAppName(Long userId, String appName);
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1 and app_name=?2 and tenant_id=?3", nativeQuery = true)
int dissociateByUserIdAndAppNameAndTenantId(Long userId, String appName, Integer tenantId);
/**
* 解除商城用户与小程序和公众号关联关系
......@@ -48,8 +48,8 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
*/
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1 and app_name in ('xyqb', 'wuxi')", nativeQuery = true)
int forbiddenXyqbAndWuxiUserByUserId(Long userId);
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1 and app_name in ('xyqb', 'wuxi') and tenant_id=?2", nativeQuery = true)
int forbiddenXyqbAndWuxiUserByUserIdAndAppIdAndTenantId(Long userId, Integer tenantId);
/**
* 关联用户
......@@ -61,8 +61,8 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
*/
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=?1,phone_no=?2 where open_id=?3 and user_id is null and app_name=?4", nativeQuery = true)
int relateUser(Long userId, String phoneNo, String openId, String appName);
@Query(value = "update wechat_userinfo set user_id=?1,phone_no=?2 where open_id=?3 and user_id is null and app_name=?4 and app_id=?5 and tenant_id=?6", nativeQuery = true)
int relateUser(Long userId, String phoneNo, String openId, String appName,String appId,Integer tenantId);
/**
* 解除关联关系 -- 包括:1、当前微信旧的关联用户;2、当前用户旧的关联微信
......@@ -74,8 +74,8 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
*/
@Transactional(propagation = MANDATORY, rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where (open_id=?1 or user_id=?2) and app_name=?3", nativeQuery = true)
int dissociateUser(String openId, Long userId, String appName);
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where (open_id=?1 or user_id=?2) and app_name=?3 and app_id=?4 and tenant_id=?5", nativeQuery = true)
int dissociateUser(String openId, Long userId, String appName,String appId,Integer tenantId);
/**
......@@ -87,23 +87,23 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
*/
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set union_id=?3 where user_id=?1 and app_name=?2", nativeQuery = true)
int updateUserUnionId(Long userId, String appName, String unionId);
@Query(value = "update wechat_userinfo set union_id=?3 where user_id=?1 and app_name=?2 and app_id=?3 and tenant_id=?4", nativeQuery = true)
int updateUserUnionId(Long userId, String appName, String unionId,String appId,Integer tenantId);
@Transactional
void deleteByUserId(Long userId);
void deleteByUserIdAndAppIdAndTenantId(Long userId,Integer tenantId);
/**
* 通过userId查询相关绑定微信记录
*/
List<WechatUserInfo> findByUserId(Long userId);
List<WechatUserInfo> findByUserIdAndTenantId(Long userId,Integer tenantId);
/**
* 通过unionId查询相关绑定微信记录
*/
List<WechatUserInfo> findByUnionId(String unionId);
List<WechatUserInfo> findByUnionIdAndAppIdAndTenantId(String unionId, Integer tenantId);
List<WechatUserInfo> findByUnionIdIn(List<String> unionIds);
List<WechatUserInfo> findByUnionIdInAndTenantId(List<String> unionIds, Integer tenantId);
List<WechatUserInfo> findByUserIdInAndAppName(List<Long> userIds, String appName);
List<WechatUserInfo> findByUserIdInAndAppNameAndTenantId(List<Long> userIds, String appName, Integer tenantId);
}
......@@ -15,7 +15,7 @@ public interface IUserApiService {
* @param uuid
* @return
*/
Optional<UserFullInfo> getUserFullInfoByUuid(String uuid);
Optional<UserFullInfo> getUserFullInfoByUuid(String uuid,Integer tenantId);
/**
* 根据phone查询完整信息
......@@ -23,5 +23,5 @@ public interface IUserApiService {
* @param phoneNo
* @return
*/
Optional<UserFullInfo> getUserFullInfoByPhone(String phoneNo);
Optional<UserFullInfo> getUserFullInfoByPhone(String phoneNo,Integer tenantId);
}
......@@ -24,8 +24,8 @@ public class UserApiServiceImpl implements IUserApiService {
private IUserInfoRepository userInfoRepository;
@Override
public Optional<UserFullInfo> getUserFullInfoByUuid(String uuid) {
User user = userService.findByUuidWithCache(uuid);
public Optional<UserFullInfo> getUserFullInfoByUuid(String uuid,Integer tenantId) {
User user = userService.findByUuidWithCache(uuid,tenantId);
if (null == user) {
return Optional.empty();
}
......@@ -35,8 +35,8 @@ public class UserApiServiceImpl implements IUserApiService {
}
@Override
public Optional<UserFullInfo> getUserFullInfoByPhone(String phoneNo) {
User user = userService.findByPhoneInDb(phoneNo);
public Optional<UserFullInfo> getUserFullInfoByPhone(String phoneNo,Integer tenantId) {
User user = userService.findByPhoneInDb(phoneNo,tenantId);
if (null == user) {
return Optional.empty();
}
......
......@@ -12,5 +12,5 @@ import cn.quantgroup.xyqb.entity.middleoffice.AppletParamEntry;
*/
public interface IAppletService {
Long relevance(AppletParamEntry appletParamEntry);
LoginVo login(String appName, String openId, Integer tenantId, String utmSource, String unionId);
LoginVo login(String appName, String openId, Integer tenantId, String utmSource, String unionId,String appId);
}
......@@ -51,7 +51,7 @@ public class AppletServiceImpl implements IAppletService {
@Override
@Transactional(rollbackFor = Exception.class)
public Long relevance(AppletParamEntry appletParamEntry) {
WechatUserInfo wechatUserInfo = iWeChatUserRepository.findByOpenIdAndAppName(appletParamEntry.getOpenId(), appletParamEntry.getAppName());
WechatUserInfo wechatUserInfo = iWeChatUserRepository.findByOpenIdAndAppNameAndAppIdAndTenantId(appletParamEntry.getOpenId(), appletParamEntry.getAppName(),appletParamEntry.getAppId(),appletParamEntry.getTenantId());
//这个接口先不考虑更换手机号的情况
wechatUserInfo = (wechatUserInfo == null ? new WechatUserInfo() : wechatUserInfo);
......@@ -69,7 +69,7 @@ public class AppletServiceImpl implements IAppletService {
wechatUserInfo.setEncryptedPhoneNo(appletParamEntry.getMobile());
wechatUserInfo.setUtmSource(appletParamEntry.getUtmSource());
if (null == wechatUserInfo.getUserId()) {//只要存在userid 就说明已经在用户表里了 不考虑小程序这边换手机号了
User user = userService.findByPhoneInDb(appletParamEntry.getMobile());
User user = userService.findByPhoneInDb(appletParamEntry.getMobile(), appletParamEntry.getTenantId());
//如果不存在就去注册一下
if (null == user) {
user = iUserRegisterService.register(appletParamEntry.getChannelId(), appletParamEntry.getMobile());
......@@ -88,9 +88,9 @@ public class AppletServiceImpl implements IAppletService {
@Override
public LoginVo login(String appName, String openId, Integer tenantId, String utmSource, String unionId) {
public LoginVo login(String appName, String openId, Integer tenantId, String utmSource, String unionId,String appId) {
WechatUserInfo wechatUserInfo = iWeChatUserRepository.findByOpenIdAndAppName(openId, appName);
WechatUserInfo wechatUserInfo = iWeChatUserRepository.findByOpenIdAndAppNameAndAppIdAndTenantId(openId, appName,appId,tenantId);
if (null == wechatUserInfo) {
log.warn("未找到此用户,appName:{} ,openId:{}", appName, openId);
throw new AppletException("未找到此用户", "0401");
......@@ -99,7 +99,7 @@ public class AppletServiceImpl implements IAppletService {
log.warn("用户未绑定到xyqb,appName:{} ,openId:{}", appName, openId);
throw new AppletException("未找到此用户绑定信息", "0401");
}
User user = userService.findById(wechatUserInfo.getUserId());
User user = userService.findById(wechatUserInfo.getUserId(), wechatUserInfo.getTenantId());
if (null == user) {
log.warn("未找到此用户,appName:{} ,openId:{}", appName, openId);
throw new AppletException("未找到此用户", "0401");
......@@ -111,7 +111,7 @@ public class AppletServiceImpl implements IAppletService {
}
if (unionId != null && !unionId.equals(wechatUserInfo.getUnionId())) {
iWeChatUserRepository.updateUserUnionId(wechatUserInfo.getUserId(), appName, unionId);
iWeChatUserRepository.updateUserUnionId(wechatUserInfo.getUserId(), appName, unionId,appId,tenantId);
}
return loginModule.loginByUserId(user.getRegisteredFrom(),
......
......@@ -14,27 +14,27 @@ import java.util.List;
public interface ISessionService {
SessionStruct createSessionAndPersist(User user, LoginProperties loginProperties);
SessionStruct createSessionAndPersist(User user, LoginProperties loginProperties,Integer tenantId);
void persistSession(String token, SessionValue sessionValue);
void persistSession(String token, SessionValue sessionValue,Long time);
void persistSession(String token, SessionValue sessionValue,Integer tenantId);
void persistSession(String token, SessionValue sessionValue,Long time,Integer tenantId);
void deleteByUserId(long userId);
void deleteByUserId(long userId,Integer tenantId);
void deleteUserCatch(User user);
void deleteUserCatch(User user,Integer tenantId);
List<SessionStruct> findByUserId(long userId);
List<SessionStruct> findByUserId(long userId,Integer tenantId);
void persistSession(List<SessionStruct> sessionStructList);
void persistSession(List<SessionStruct> sessionStructList,Integer tenantId);
/**
* 删除会话
*/
void deleteSession(String token);
void deleteSession(String token,Integer tenantId);
void persistSessionExchange(String token, SessionValue sessionValue, long expire);
void persistSessionExchange(String token, SessionValue sessionValue, long expire,Integer tenantId);
void kdspDeleteSession(Long userId, LoginProperties loginProperties);
void kdspDeleteSession(Long userId, LoginProperties loginProperties,Integer tenantId);
/**
* 更新session
......@@ -46,5 +46,5 @@ public interface ISessionService {
* @param ordinal - 登录方式
* @return
*/
AuthBean createSession(User user, LoginProperties loginProperties, int ordinal);
AuthBean createSession(User user, LoginProperties loginProperties, int ordinal,Integer tenantId);
}
......@@ -57,22 +57,22 @@ public class SessionServiceImpl implements ISessionService {
* @return
*/
@Override
public AuthBean createSession(User user, LoginProperties properties, int loginType) {
public AuthBean createSession(User user, LoginProperties properties, int loginType,Integer tenantId) {
//找到用户
//TODO: 使用userId
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties);
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties,tenantId);
SessionStruct sessionStruct = null;
if (StringUtils.isNotEmpty(sessionId)) {
sessionStruct = findSessionBySessionId(sessionId);
sessionStruct = findSessionBySessionId(sessionId,tenantId);
}
if (Objects.nonNull(sessionStruct) && Objects.nonNull(properties)) {
sessionStruct.setAttribute("channelId", String.valueOf(properties.getChannelId()));
sessionStruct.setAttribute("createdFrom", String.valueOf(properties.getCreatedFrom()));
sessionStruct.setAttribute("appChannel", String.valueOf(properties.getAppChannel()));
sessionStruct.getValues().setLoginProperties(properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
persistSession(sessionStruct.getSid(), sessionStruct.getValues(),tenantId);
} else {
sessionStruct = createSessionAndPersist(user, properties);
sessionStruct = createSessionAndPersist(user, properties,tenantId);
}
String uuid = user.getUuid();
AuthBean authBean = new AuthBean();
......@@ -89,27 +89,27 @@ public class SessionServiceImpl implements ISessionService {
}
@Override
public SessionStruct createSessionAndPersist(User user, LoginProperties properties) {
public SessionStruct createSessionAndPersist(User user, LoginProperties properties,Integer tenantId) {
SessionStruct sessionStruct;
//获取sessionid
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties);
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties,tenantId);
if (StringUtils.length(sessionId) > 0) {
sessionStruct = findSessionBySessionId(sessionId);
sessionStruct = findSessionBySessionId(sessionId,tenantId);
if (sessionStruct == null) {
sessionStruct = newSession(user, properties);
} else {
sessionStruct.getValues().setLoginProperties(properties);
}
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
persistSession(sessionStruct.getSid(), sessionStruct.getValues(),tenantId);
} else {
sessionStruct = newSession(user, properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
persistSession(sessionStruct.getSid(), sessionStruct.getValues(),tenantId);
}
return sessionStruct;
}
private String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties) {
return stringRedisTemplate.opsForValue().get(generateLoginPropertiesKey(userId, properties));
private String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties,Integer tenantId) {
return stringRedisTemplate.opsForValue().get(generateLoginPropertiesKey(userId, properties,tenantId));
}
/**
......@@ -119,7 +119,7 @@ public class SessionServiceImpl implements ISessionService {
* @param properties baitiao/xyqb/vcc ... + 用户注册来源
* @return redisKey. 用来标识这个渠道的用户 Session 是否存在
*/
private String generateLoginPropertiesKey(Long userId, LoginProperties properties) {
private String generateLoginPropertiesKey(Long userId, LoginProperties properties,Integer tenantId) {
if (ObjectUtils.isEmpty(properties.getTenantId())) {
return Constants.Session.USER_SESSION_ID_CACHE + ":" + userId + ":" + properties.getMerchantName() + ":" + properties.getCreatedFrom();
}else if (properties.getTenantId().equals(0) || TenantUtil.TENANT_DEFAULT.equals(properties.getTenantId())) {
......@@ -129,7 +129,7 @@ public class SessionServiceImpl implements ISessionService {
}
}
private String findSessionValueBySessionId(String sessionId) {
private String findSessionValueBySessionId(String sessionId,Integer tenantId) {
String result = stringRedisTemplate.opsForValue().get(Constants.Session.USER_SESSION_CACHE + sessionId);
return StringUtils.defaultString(result, "");
}
......@@ -162,21 +162,21 @@ public class SessionServiceImpl implements ISessionService {
@Override
@UserBtRegisterFill
public void persistSession(String token, SessionValue sessionValue) {
persistSession(token, sessionValue, Constants.Session.SESSION_VALID_TIME);
public void persistSession(String token, SessionValue sessionValue,Integer tenantId) {
persistSession(token, sessionValue, Constants.Session.SESSION_VALID_TIME,tenantId);
}
@Override
public void persistSession(String token, SessionValue sessionValue, Long time) {
public void persistSession(String token, SessionValue sessionValue, Long time,Integer tenantId) {
Timestamp current = new Timestamp(System.currentTimeMillis());
sessionValue.setLastAccessTime(current);
String json = JSON.toJSONString(sessionValue);
stringRedisTemplate.opsForValue().set(Constants.Session.USER_SESSION_CACHE + token, json,
time, TimeUnit.SECONDS);
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties());
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties(),tenantId);
stringRedisTemplate.opsForValue().set(key, token, time, TimeUnit.SECONDS);
log.info("[Session生命期延续],token:{},有效期:[24Hour]", token);
setUserIdTokenKeys(sessionValue.getUser().getId(), key);
setUserIdTokenKeys(sessionValue.getUser().getId(), key,tenantId);
}
/**
......@@ -185,9 +185,9 @@ public class SessionServiceImpl implements ISessionService {
* @param userId
* @param key
*/
private void setUserIdTokenKeys(long userId, String key) {
private void setUserIdTokenKeys(long userId, String key,Integer tenantId) {
if (0L != userId) {
String setKey = getUserSessionSetKey(userId);
String setKey = getUserSessionSetKey(userId,tenantId);
try {
stringRedisTemplate.opsForSet().add(setKey, key);
stringRedisTemplate.expire(setKey, Constants.Session.SESSION_VALID_TIME, TimeUnit.SECONDS);
......@@ -198,8 +198,8 @@ public class SessionServiceImpl implements ISessionService {
}
}
private SessionStruct findSessionBySessionId(String sessionId) {
String sessionValue = findSessionValueBySessionId(sessionId);
private SessionStruct findSessionBySessionId(String sessionId,Integer tenantId) {
String sessionValue = findSessionValueBySessionId(sessionId,tenantId);
if (StringUtils.isEmpty(sessionValue)) {
log.warn("[SessionServiceImpl][findSessionBySessionId] session data 未找到:sid:{}", sessionId);
return null;
......@@ -223,15 +223,15 @@ public class SessionServiceImpl implements ISessionService {
@Override
@CacheEvict(value = "userextinfocache", key = "'extinfo' + #userId", cacheManager = "cacheManager")
public void deleteByUserId(long userId) {
public void deleteByUserId(long userId,Integer tenantId) {
//1.删除session关联
String setKey = getUserSessionSetKey(userId);
String setKey = getUserSessionSetKey(userId,tenantId);
Set useIdKeys = stringRedisTemplate.opsForSet().members(setKey);
if (!CollectionUtils.isEmpty(useIdKeys)) {
useIdKeys.forEach(key -> {
log.info("删除用户userId={}的缓存信息", userId);
String token = stringRedisTemplate.opsForValue().get(String.valueOf(key));
stringRedisTemplate.delete(getUserTokenKey(token));
stringRedisTemplate.delete(getUserTokenKey(token,tenantId));
stringRedisTemplate.delete(String.valueOf(key));
});
//2.删除session缓存健
......@@ -239,7 +239,7 @@ public class SessionServiceImpl implements ISessionService {
}
}
private String getUserTokenKey(String token) {
private String getUserTokenKey(String token,Integer tenantId) {
return Constants.Session.USER_SESSION_CACHE + token;
}
......@@ -255,39 +255,39 @@ public class SessionServiceImpl implements ISessionService {
@CacheEvict(value = "userSpouseCache", key = "'spouse' + #user.id", cacheManager = "cacheManager"),
@CacheEvict(value = "btRegisterCache", key = "'userId' + #user.id", cacheManager = "cacheManager")})
@Override
public void deleteUserCatch(User user) {
public void deleteUserCatch(User user,Integer tenantId) {
}
@Override
public List<SessionStruct> findByUserId(long userId) {
public List<SessionStruct> findByUserId(long userId,Integer tenantId) {
List<SessionStruct> sessionStructList = new ArrayList<>();
String setKey = getUserSessionSetKey(userId);
String setKey = getUserSessionSetKey(userId,tenantId);
Set<String> userIdKeys = stringRedisTemplate.opsForSet().members(setKey);
if (CollectionUtils.isEmpty(userIdKeys)) {
return sessionStructList;
}
for (String userIdKey : userIdKeys) {
String sessionId = stringRedisTemplate.opsForValue().get(userIdKey);
SessionStruct sessionStruct = findSessionBySessionId(sessionId);
SessionStruct sessionStruct = findSessionBySessionId(sessionId,tenantId);
sessionStructList.add(sessionStruct);
}
return sessionStructList;
}
@Override
public void persistSession(List<SessionStruct> sessionStructList) {
public void persistSession(List<SessionStruct> sessionStructList,Integer tenantId) {
for (SessionStruct sessionStruct : sessionStructList) {
String sid = sessionStruct.getSid();
SessionValue values = sessionStruct.getValues();
persistSession(sid, values);
persistSession(sid, values,tenantId);
}
}
@Override
public void deleteSession(String token) {
public void deleteSession(String token,Integer tenantId) {
SessionStruct sessionStruct = findSessionBySessionId(token);
SessionStruct sessionStruct = findSessionBySessionId(token,tenantId);
if (null != sessionStruct) {
......@@ -297,7 +297,7 @@ public class SessionServiceImpl implements ISessionService {
User user = values.getUser();
String key = generateLoginPropertiesKey(user.getId(), values.getLoginProperties());
String key = generateLoginPropertiesKey(user.getId(), values.getLoginProperties(),tenantId);
stringRedisTemplate.delete(key);
......@@ -306,25 +306,25 @@ public class SessionServiceImpl implements ISessionService {
}
@Override
public void persistSessionExchange(String token, SessionValue sessionValue, long expire) {
public void persistSessionExchange(String token, SessionValue sessionValue, long expire,Integer tenantId) {
Timestamp current = new Timestamp(System.currentTimeMillis());
sessionValue.setLastAccessTime(current);
String json = JSON.toJSONString(sessionValue);
stringRedisTemplate.opsForValue().set(Constants.Session.USER_SESSION_CACHE + token, json,
Constants.Session.SESSION_VALID_TIME, TimeUnit.SECONDS);
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties());
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties(),tenantId);
stringRedisTemplate.opsForValue().set(key, token, expire, TimeUnit.SECONDS);
setUserIdTokenKeys(sessionValue.getUser().getId(), key);
setUserIdTokenKeys(sessionValue.getUser().getId(), key,tenantId);
}
public void kdspDeleteSession(Long userId, LoginProperties loginProperties) {
public void kdspDeleteSession(Long userId, LoginProperties loginProperties,Integer tenantId) {
List<Long> createFromList = Arrays.asList(214L, 217L);
for (Long createFrom : createFromList) {
loginProperties.setCreatedFrom(createFrom);
String key = generateLoginPropertiesKey(userId, loginProperties);
String key = generateLoginPropertiesKey(userId, loginProperties,tenantId);
String token = stringRedisTemplate.opsForValue().get(key);
deleteSession(token);
deleteSession(token,tenantId);
}
}
......@@ -336,7 +336,7 @@ public class SessionServiceImpl implements ISessionService {
* @param userId - 用户主键
* @return
*/
private String getUserSessionSetKey(long userId) {
private String getUserSessionSetKey(long userId,Integer tenantId) {
return Constants.Session.USER_SESSION_KEY_SET + userId;
}
}
......@@ -18,7 +18,7 @@ public interface IModifyPhoneNoService {
/**
*
*/
Long saveStep1(Long id, Step1Req step1Req);
Long saveStep1(Long id, Step1Req step1Req,Integer tenantId);
/**
*
......@@ -31,7 +31,7 @@ public interface IModifyPhoneNoService {
void feedback(Long id);
void audit(AuditReq auditReq);
void audit(AuditReq auditReq,Integer tenantId);
void submitModify(ModifyPhoneRecord modifyPhoneRecord);
......@@ -43,7 +43,7 @@ public interface IModifyPhoneNoService {
UserModifyPhoneRecordResp getLastRecord(Long userId);
void saveRejectReason(ModifyRejectRecord modifyRejectRecord);
void saveRejectReason(ModifyRejectRecord modifyRejectRecord,Integer tenantId);
UserModifyPhoneRecordResp modifyRecord(String prevPhoneNo);
}
......@@ -16,45 +16,44 @@ import java.util.Map;
*/
public interface IUserService {
User findByPhoneWithCache(String phone);
User findByPhoneWithCache(String phone,Integer tenantId);
User findByUuidWithCache(String uuid);
User findByUuidWithCache(String uuid,Integer tenantId);
boolean exist(String phoneNo);
boolean exist(String phoneNo,Integer tenantId);
boolean resetPassword(String phoneNo, String password);
boolean resetPassword(String phoneNo, String password,Integer tenantId);
User findByPhoneInDb(String phone);
User findByPhoneInDb(String phone,Integer tenantId);
User findSlaveByPhoneInDb(String phone);
User findSlaveByPhoneInDb(String phone,Integer tenantId);
User findByUuidInDb(String uuid);
User findByUuidInDb(String uuid,Integer tenantId);
/**
* 根据手机号或身份证号查询用户UUID
*
* @param phoneNo - 手机号
* @param idNo - 身份证号
* @return user表的uuid
*/
String findUuid(String phoneNo, String idNo);
String findUuid(String phoneNo,Integer tenantId);
Map<Long, String> findPhoneByIdsInDb(List<Long> userIds, Integer tenantId);
User saveUser(User user);
User findById(Long userId);
User findById(Long userId,Integer tenantId);
List<User> findByPhones(List<String> phones);
List<User> findByPhones(List<String> phones,Integer tenantId);
List<User> findRegisterUserByTime(String beginTime, String endTime);
List<User> findRegisterUserByTime(String beginTime, String endTime,Integer tenantId);
/**
* 禁用用户
*
* @param phoneNo 电话号码
*/
int forbiddenUser(Boolean enable, String phoneNo);
int forbiddenUser(Boolean enable, String phoneNo,Integer tenantId);
List<UserInfo> findUserInfosByPhones(List<String> phones, Integer tenantId);
......@@ -73,11 +72,11 @@ public interface IUserService {
* @param uuid 根据 uuid
* @param phoneNo 根据手机号
*/
void userCacheEvict(String uuid, String phoneNo);
void userCacheEvict(String uuid, String phoneNo,Integer tenantId);
JsonResult loginFast(Long channelId, String appChannel, Long createdFrom, Long btRegisterChannelId,
String dimension, String clickId, HttpServletRequest request, Merchant merchant,
String phoneNo, Integer tenantId, Long geetestLogId);
String phoneNo, Integer tenantId, Long geetestLogId,String appId);
/**
* 查询用户全量信息
......@@ -99,23 +98,21 @@ public interface IUserService {
/**
* 登出
*/
void logout(String token);
void logout(String token,Integer tenantId);
void kdspLogout(Long userId, LoginProperties loginProperties);
List<User> findAll();
void kdspLogout(Long userId, LoginProperties loginProperties,Integer tenantId);
/**
* 通过userId销户
*
* @param userId 用户id
*/
void deregister(Long userId);
void deregister(Long userId,Integer tenantId);
User submitModifyPhone(String prevPhoneNo, String curPhoneNo);
User submitModifyPhone(String prevPhoneNo, String curPhoneNo,Integer tenantId);
/**
* 渠道用户签署合同
*/
void channelUserSignContract(User user, Long loginFrom);
void channelUserSignContract(User user, Long loginFrom,Integer tenantId);
}
......@@ -111,9 +111,9 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Override
@AccessLimit(redisKey = "saveStep1")
@Transactional(rollbackFor = Exception.class)
public Long saveStep1(Long userId, Step1Req step1Req) {
public Long saveStep1(Long userId, Step1Req step1Req,Integer tenantId) {
allowModify4Step1(userId, step1Req.getName(), step1Req.getIdCard(), step1Req.getPrevPhoneNo(), step1Req.getCurPhoneNo(),
step1Req.getSmsCode());
step1Req.getSmsCode(),tenantId);
ModifyPhoneNo modifyPhoneNo = Step1Req.adapt(step1Req);
modifyPhoneNo.setUserId(userId);
modifyPhoneNoRepository.saveAndFlush(modifyPhoneNo);
......@@ -229,7 +229,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Override
@Transactional(rollbackFor = Exception.class)
public void audit(AuditReq auditReq) {
public void audit(AuditReq auditReq,Integer tenantId) {
ModifyPhoneNo modifyPhoneNo = modifyPhoneNoRepository.findOne(auditReq.getId());
if (modifyPhoneNo == null) {
throw new DataException("数据不存在。");
......@@ -242,7 +242,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
if (ModifyPhoneNoApplyStatusEnum.DONE == auditReq.getApplyStatus()) {
log.info("audit userId = 【{}】, name = 【{}】, idCard = 【{}】, prevPhoneNo = 【{}】, " +
"curPhoneNo = 【{}】", modifyPhoneNo.getUserId(), modifyPhoneNo.getName(), modifyPhoneNo.getIdCard(), modifyPhoneNo.getPrevPhoneNo(), modifyPhoneNo.getCurPhoneNo());
if (userRepository.findByPhoneNo(modifyPhoneNo.getCurPhoneNo()) != null) {
if (userRepository.findByPhoneNoAndTenantId(modifyPhoneNo.getCurPhoneNo(),tenantId) != null) {
throw new DataException("新手机号已存在,不支持更换。");
}
// 请求其他系统信息
......@@ -259,7 +259,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
// 如果有返回值
if ("0000".equals(resultStrJson.getBusinessCode()) || "4014".equals(resultStrJson.getBusinessCode())) {
// 同步金融修改电商
User user = userService.findById(modifyPhoneNo.getUserId());
User user = userService.findById(modifyPhoneNo.getUserId(),tenantId);
userService.modifyPhoneNo(modifyPhoneNo.getPrevPhoneNo(), modifyPhoneNo.getCurPhoneNo(),user.getTenantId());
modifyPhoneNo.setApplyStatus(ModifyPhoneNoApplyStatusEnum.DONE.ordinal());
modifyPhoneNo.setProcessingStatus(ModifyPhoneNoProcessingStatusEnum.WAIT_4_USER_FEEDBACK.ordinal());
......@@ -283,7 +283,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
if (Objects.isNull(modifyPhoneRecord.getUserId())){
throw new DataException("用户ID不能为空");
}
User user = userService.findById(modifyPhoneRecord.getUserId());
User user = userService.findById(modifyPhoneRecord.getUserId(),modifyPhoneRecord.getTenantId());
if (user == null) {
throw new DataException("用户不存在");
}
......@@ -310,12 +310,12 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
// 如果有返回值
if ("0000".equals(resultStrJson.getBusinessCode()) || "4014".equals(resultStrJson.getBusinessCode())) {
// 同步金融修改电商
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo());
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo(),modifyPhoneRecord.getTenantId());
record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.DONE.ordinal());
record.setFinancialResponse(JSONObject.toJSONString(resultStrJson));
modifyPhoneRecordRepository.saveAndFlush(record);
//登出此用户
sessionService.deleteByUserId(user.getId());
sessionService.deleteByUserId(user.getId(),modifyPhoneRecord.getTenantId());
} else {
String msg = "金融返回失败" + (StringUtils.isNotBlank(resultStrJson.getMsg()) ? ":" + resultStrJson.getMsg() : "");
record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.NO_ALLOW.ordinal());
......@@ -345,7 +345,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
if (modifyPhoneRecord.getCurPhoneNo().equals(modifyPhoneRecord.getPrevPhoneNo())) {
throw new DataException("新手机号已存在,不支持更换");
}
User user = userService.findByPhoneInDb(modifyPhoneRecord.getPrevPhoneNo());
User user = userService.findByPhoneInDb(modifyPhoneRecord.getPrevPhoneNo(),modifyPhoneRecord.getTenantId());
if (user == null) {
throw new AppletException("用户不存在", "1001");
}
......@@ -355,14 +355,14 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
throw new DataException("原手机号填写不符");
}
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo());
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo(),modifyPhoneRecord.getTenantId());
UserModifyPhoneRecord record = new UserModifyPhoneRecord();
BeanUtils.copyProperties(modifyPhoneRecord, record);
record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.DONE.ordinal());
record.setUserId(user.getId());
modifyPhoneRecordRepository.saveAndFlush(record);
//登出此用户
sessionService.deleteByUserId(user.getId());
sessionService.deleteByUserId(user.getId(),modifyPhoneRecord.getTenantId());
}
} catch (Exception e) {
......@@ -397,11 +397,11 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
if (modifyPhoneRecord.getCurPhoneNo().equals(modifyPhoneRecord.getPrevPhoneNo())) {
throw new DataException("新手机号与原手机号相同");
}
User userByCurPhoneNo = userService.findByPhoneInDb(modifyPhoneRecord.getCurPhoneNo());
User userByCurPhoneNo = userService.findByPhoneInDb(modifyPhoneRecord.getCurPhoneNo(),modifyPhoneRecord.getTenantId());
if (Objects.nonNull(userByCurPhoneNo)){
throw new DataException("新手机号已存在,不支持更换");
}
User user = userService.findByPhoneInDb(modifyPhoneRecord.getPrevPhoneNo());
User user = userService.findByPhoneInDb(modifyPhoneRecord.getPrevPhoneNo(),modifyPhoneRecord.getTenantId());
if (user == null) {
throw new AppletException("用户不存在", "1001");
}
......@@ -428,12 +428,12 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
// 如果有返回值
if ("0000".equals(resultStrJson.getBusinessCode()) || "4014".equals(resultStrJson.getBusinessCode())) {
// 同步金融修改电商
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo());
userService.submitModifyPhone(modifyPhoneRecord.getPrevPhoneNo(), modifyPhoneRecord.getCurPhoneNo(),modifyPhoneRecord.getTenantId());
record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.DONE.ordinal());
record.setFinancialResponse(JSONObject.toJSONString(resultStrJson));
modifyPhoneRecordRepository.saveAndFlush(record);
//登出此用户
sessionService.deleteByUserId(user.getId());
sessionService.deleteByUserId(user.getId(),modifyPhoneRecord.getTenantId());
} else {
String msg = "金融返回失败" + (StringUtils.isNotBlank(resultStrJson.getMsg()) ? ":" + resultStrJson.getMsg() : "");
record.setApplyStatus(ModifyPhoneNoApplyStatusEnum.NO_ALLOW.ordinal());
......@@ -472,8 +472,8 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
}
@Override
public void saveRejectReason(ModifyRejectRecord modifyRejectRecord) {
User user = userService.findById(modifyRejectRecord.getUserId());
public void saveRejectReason(ModifyRejectRecord modifyRejectRecord,Integer tenantId) {
User user = userService.findById(modifyRejectRecord.getUserId(),tenantId);
if (user == null) {
throw new AppletException("用户不存在", "1001");
}
......@@ -536,7 +536,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
* @param smsCode 新手机号码短信验证码
* @return
*/
public void allowModify4Step1(Long userId, String name, String idCard, String prevPhoneNo, String curPhoneNo, String smsCode) {
public void allowModify4Step1(Long userId, String name, String idCard, String prevPhoneNo, String curPhoneNo, String smsCode,Integer tenantId) {
log.info("allowModify4Step1 userId = 【{}】, name = 【{}】, idCard = 【{}】, prevPhoneNo = 【{}】, " +
"curPhoneNo = 【{}】, smsCode = 【{}】", userId, name, idCard, prevPhoneNo, curPhoneNo, smsCode);
if (modifyPhoneNoRepository.findFirstByUserIdAndApplyStatus(userId, ModifyPhoneNoProcessingStatusEnum.INIT.ordinal()) != null) {
......@@ -546,7 +546,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
throw new DataException("验证码不正确。");
}
if (userService.findByPhoneInDb(curPhoneNo) != null) {
if (userService.findByPhoneInDb(curPhoneNo,tenantId) != null) {
throw new DataException("填写信息有误,新手机号已注册。");
}
// checkLoanStatus(userId); 调用金融接口方式是错误的,改为同步金融一起修改手机号
......
......@@ -19,9 +19,13 @@ import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import cn.quantgroup.xyqb.service.register.IUserDeregisterService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.user.ILockIpv4Service;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*;
import cn.quantgroup.xyqb.util.BctyptPasswordUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -119,21 +123,20 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override
// @Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
public User findByPhoneInDb(String phone) {
public User findByPhoneInDb(String phone, Integer tenantId) {
if (StringUtils.isBlank(phone)) {
return null;
}
User user = userRepository.findByEncryptedPhoneNo(phone);
User user = userRepository.findByEncryptedPhoneNoAndTenantId(phone, tenantId);
if (user == null) {
user = userRepository.findByPhoneNo(phone);
user = userRepository.findByPhoneNoAndTenantId(phone, tenantId);
}
return user;
}
@Override
// @Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
public User findSlaveByPhoneInDb(String phone) {
return userRepository.findByPhoneNo(phone);
public User findSlaveByPhoneInDb(String phone, Integer tenantId) {
return userRepository.findByPhoneNoAndTenantId(phone, tenantId);
}
@Override
......@@ -141,24 +144,20 @@ public class UserServiceImpl implements IUserService, IBaseController {
if (CollectionUtils.isEmpty(userIds)) {
return Maps.newHashMap();
}
List<User> users = userRepository.findByIdIn(userIds);
List<User> users = userRepository.findByIdInAndTenantId(userIds, tenantId);
return users.stream().collect(Collectors.toMap(User::getId, User::getPhoneNo));
}
@Override
public User findByUuidInDb(String uuid) {
return userRepository.findByUuid(uuid);
public User findByUuidInDb(String uuid, Integer tenantId) {
return userRepository.findByUuidAndTenantId(uuid, tenantId);
}
@Override
public String findUuid(String phoneNo, String idNo) {
public String findUuid(String phoneNo, Integer tenantId) {
// 优先按手机号查
if (ValidationUtil.validatePhoneNo(phoneNo)) {
return userRepository.findUuidByPhoneNo(phoneNo);
}
// 按身份证号查
if (StringUtils.isNotBlank(idNo)) {
return userRepository.findUuidByIdNo(idNo);
return userRepository.findUuidByPhoneNoAndTenantId(phoneNo, tenantId);
}
return null;
}
......@@ -170,21 +169,23 @@ public class UserServiceImpl implements IUserService, IBaseController {
}
@Override
public User findById(Long userId) {
return userRepository.findById(userId);
public User findById(Long userId, Integer tenantId) {
return userRepository.findByIdAndTenantId(userId, tenantId);
}
@Override
public List<User> findByPhones(List<String> phones) {
public List<User> findByPhones(List<String> phones, Integer tenantId) {
Pageable pageable = new PageRequest(0, 500, new Sort(Sort.Direction.DESC, "id"));
Page<User> userPageList = userRepository.findAll((root, query, cb) -> {
query.where(root.get(Constants.ENCRYPTED_PHONE_NO).as(String.class).in(phones));
query.where(root.get(Constants.ENCRYPTED_PHONE_NO).as(String.class).in(phones)
, root.get("tenant_id").as(Integer.class).in(tenantId))
;
return query.getRestriction();
}, pageable);
List<User> userList = userPageList.getContent();
if (userList.isEmpty()) {
userList = userRepository.findAll((root, query, cb) -> {
query.where(root.get(Constants.PHONE_NO).as(String.class).in(phones));
query.where(root.get(Constants.PHONE_NO).as(String.class).in(phones), root.get("tenant_id").as(Integer.class).in(tenantId));
return query.getRestriction();
});
}
......@@ -192,26 +193,26 @@ public class UserServiceImpl implements IUserService, IBaseController {
}
@Override
public User findByPhoneWithCache(String phone) {
public User findByPhoneWithCache(String phone, Integer tenantId) {
if (StringUtils.isBlank(phone)) {
return null;
}
User user = userRepository.findByEncryptedPhoneNo(phone);
User user = userRepository.findByEncryptedPhoneNoAndTenantId(phone,tenantId);
if (user == null) {
user = userRepository.findByPhoneNo(phone);
user = userRepository.findByPhoneNoAndTenantId(phone,tenantId);
}
return user;
}
@Override
// @Cacheable(value = "usercache", key = "'xyqbuser' + #uuid", unless = "#result == null", cacheManager = "cacheManager")
public User findByUuidWithCache(String uuid) {
return userRepository.findByUuid(uuid);
public User findByUuidWithCache(String uuid, Integer tenantId) {
return userRepository.findByUuidAndTenantId(uuid,tenantId);
}
@Override
public boolean exist(String phoneNo) {
return userRepository.findByPhoneNo(phoneNo) != null;
public boolean exist(String phoneNo, Integer tenantId) {
return userRepository.findByPhoneNoAndTenantId(phoneNo,tenantId) != null;
}
/**
......@@ -223,9 +224,9 @@ public class UserServiceImpl implements IUserService, IBaseController {
* @date 2017-02-15 修改用户修改密码时,更新updatedAt时间
*/
@Override
@CacheEvict(value = "usercache", key = "'xyqbuser' + #phoneNo", cacheManager = "cacheManager")
public boolean resetPassword(String phoneNo, String password) {
User user = findByPhoneInDb(phoneNo);
@CacheEvict(value = "usercache", key = "'xyqbuser' + #phoneNo + #tenantId", cacheManager = "cacheManager")
public boolean resetPassword(String phoneNo, String password, Integer tenantId) {
User user = findByPhoneInDb(phoneNo, tenantId);
if (user == null) {
throw new RuntimeException("用户[" + phoneNo + "]不存在");
}
......@@ -234,31 +235,31 @@ public class UserServiceImpl implements IUserService, IBaseController {
user.setCipherPassword(BctyptPasswordUtil.BCryptWithSalt(password));
user = userRepository.save(user);
stringRedisTemplate.expire("usercache:xyqbuser" + phoneNo, 1L, TimeUnit.MILLISECONDS);
sessionService.deleteByUserId(user.getId());
sessionService.deleteByUserId(user.getId(),tenantId);
return BctyptPasswordUtil.BCryptCheckPw(password, user.getCipherPassword());
}
@Override
public List<User> findRegisterUserByTime(String beginTime, String endTime) {
return userRepository.findRegisterUserByTime(beginTime, endTime);
public List<User> findRegisterUserByTime(String beginTime, String endTime, Integer tenantId) {
return userRepository.findRegisterUserByTimeAndTenantId(beginTime, endTime,tenantId);
}
@Override
@CacheEvict(value = "usercache", key = "'xyqbuser' + #phoneNo", cacheManager = "cacheManager")
public int forbiddenUser(Boolean enable, String phoneNo) {
return userRepository.forbiddenUser(enable, phoneNo);
public int forbiddenUser(Boolean enable, String phoneNo, Integer tenantId) {
return userRepository.forbiddenUserAndTenantId(enable, phoneNo,tenantId);
}
@Override
public List<UserInfo> findUserInfosByPhones(List<String> phones, Integer tenantId) {
List<User> users = findByPhones(phones);
List<User> users = findByPhones(phones,tenantId);
if (CollectionUtils.isEmpty(phones)) {
return Collections.emptyList();
}
List<UserInfoEntity> userDetails = userInfoRepository.findByTenantIdAndPhoneNoIn(tenantId,phones);
List<UserInfoEntity> userDetails = userInfoRepository.findByTenantIdAndPhoneNoIn(tenantId, phones);
if (!CollectionUtils.isEmpty(users)) {
Map<Long, User> userMap = Maps.newHashMapWithExpectedSize(users.size());
......@@ -281,15 +282,15 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override
@Transactional(rollbackFor = Exception.class)
public User modifyPhoneNo(String oldPhoneNo, String newPhoneNo,Integer tenantId) {
public User modifyPhoneNo(String oldPhoneNo, String newPhoneNo, Integer tenantId) {
//1. 判断新手机号是否存在
User newPhoneUser = userRepository.findByPhoneNo(newPhoneNo);
UserInfoEntity newPhoneUserDetail = userInfoRepository.findByPhoneNoAndTenantId(newPhoneNo,tenantId);
User newPhoneUser = userRepository.findByPhoneNoAndTenantId(newPhoneNo,tenantId);
UserInfoEntity newPhoneUserDetail = userInfoRepository.findByPhoneNoAndTenantId(newPhoneNo, tenantId);
if (Objects.nonNull(newPhoneUser) || Objects.nonNull(newPhoneUserDetail)) {
//新手机号已存在
throw new DataException("新手机号存在, 用户修改手机号后新手机号注册了。");
}
User oldPhoneUser = userRepository.findByPhoneNo(oldPhoneNo);
User oldPhoneUser = userRepository.findByPhoneNoAndTenantId(oldPhoneNo,tenantId);
if (Objects.isNull(oldPhoneUser)) {
//这不是扯了.旧手机号不存在.
throw new DataException("旧手机号不存在, 可能已经修改成功了。");
......@@ -301,7 +302,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
User user = userRepository.saveAndFlush(oldPhoneUser);
//2.2 修改 user_detail 表
UserInfoEntity oldPhoneUserDetail = userInfoRepository.findByPhoneNoAndTenantId(oldPhoneNo,tenantId);
UserInfoEntity oldPhoneUserDetail = userInfoRepository.findByPhoneNoAndTenantId(oldPhoneNo, tenantId);
oldPhoneUserDetail.setPhoneNo(newPhoneNo);
userInfoRepository.save(oldPhoneUserDetail);
......@@ -316,7 +317,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
@CacheEvict(value = "usercache", key = "'xyqbuser' + #phoneNo", cacheManager = "cacheManager"),
@CacheEvict(value = "usercache", key = "'xyqbuser' + #uuid", cacheManager = "cacheManager")
})
public void userCacheEvict(String uuid, String phoneNo) {
public void userCacheEvict(String uuid, String phoneNo, Integer tenantId) {
log.info("清理用户缓存成功,uuid:{},phoneNo:{}", uuid, phoneNo);
}
......@@ -326,9 +327,9 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override
@RedisLock(prefix = "lock:login:fast:", key = "#this[8]")
public JsonResult loginFast(Long channelId, String appChannel, Long createdFrom, Long btRegisterChannelId,
String dimension, String clickId, HttpServletRequest request, Merchant merchant, String phoneNo, Integer tenantId, Long geetestLogId) {
String dimension, String clickId, HttpServletRequest request, Merchant merchant, String phoneNo, Integer tenantId, Long geetestLogId,String appId) {
Boolean register = false;
User user = findByPhoneWithCache(phoneNo);
User user = findByPhoneWithCache(phoneNo,tenantId);
if (user != null && !user.getEnable()) {
log.info("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult(USER_ERROR_OR_ENABLE_ERROR, null);
......@@ -343,7 +344,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
MqUtils.sendRegisterMessageForGdt(phoneNo, clickId);
register = true;
}
if (!wechatRelateUserIfNecessary(user, request)) {
if (!wechatRelateUserIfNecessary(user, request,appId,tenantId)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
......@@ -390,7 +391,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId());
}
LoginProperties loginProperties = new LoginProperties("", 3, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName(), tenantId);
AuthBean session = sessionService.createSession(user, loginProperties, LoginType.VERIFICATIONCODE.ordinal());
AuthBean session = sessionService.createSession(user, loginProperties, LoginType.VERIFICATIONCODE.ordinal(),tenantId);
session.setRegister(register);
lockIpv4Service.unLockPhone(phoneNo);
return new JsonResult(session);
......@@ -403,7 +404,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
* @param request - 当前请求
* @return true - 继续登录,false - 微信关联失败,重新登录
*/
private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request) {
private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request,String appId ,Integer tenantId) {
Objects.requireNonNull(request, "无效请求");
String clientIp = IpUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet();
......@@ -417,7 +418,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
Long userId = user.getId();
String phoneNo = user.getPhoneNo();
try {
int rows = wechatService.relateUser(userId, phoneNo, request.getParameter(Constants.WECHAT_OPEN_ID));
int rows = wechatService.relateUser(userId, phoneNo, request.getParameter(Constants.WECHAT_OPEN_ID),appId,tenantId);
return rows > 0;
} catch (Exception e) {
log.error("微信关联失败,user:{}, request-Header:{}", user, JSON.toJSONString(getRequestHeaderMap(request)), e);
......@@ -432,9 +433,9 @@ public class UserServiceImpl implements IUserService, IBaseController {
* @return
*/
@Override
public UserFullResp findUserFullSearchByUserId(Long userId,Integer tenantId) {
User user = userRepository.findById(userId);
UserInfoEntity userDetail = userInfoRepository.findByUserIdAndTenantId(userId,tenantId);
public UserFullResp findUserFullSearchByUserId(Long userId, Integer tenantId) {
User user = userRepository.findByIdAndTenantId(userId,tenantId);
UserInfoEntity userDetail = userInfoRepository.findByUserIdAndTenantId(userId, tenantId);
UserFullResp userFullResp = UserFullResp.builder().userId(userId).build();
if (user != null) {
......@@ -461,35 +462,30 @@ public class UserServiceImpl implements IUserService, IBaseController {
List<Long> collect = vals.stream()
.map(Long::valueOf)
.collect(Collectors.toList());
users = userRepository.findByIdIn(collect);
users = userRepository.findByIdInAndTenantId(collect,tenantId);
} else { //不是1 就是 uuids
users = userRepository.findByUuidIn(vals);
users = userRepository.findByUuidInAndTenantId(vals,tenantId);
}
return users;
}
@Override
public void logout(String token) {
sessionService.deleteSession(token);
}
@Override
public void kdspLogout(Long userId, LoginProperties loginProperties) {
sessionService.kdspDeleteSession(userId, loginProperties);
public void logout(String token,Integer tenantId) {
sessionService.deleteSession(token,tenantId);
}
@Override
public List<User> findAll() {
return userRepository.findAll();
public void kdspLogout(Long userId, LoginProperties loginProperties, Integer tenantId) {
sessionService.kdspDeleteSession(userId, loginProperties,tenantId);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deregister(Long userId) {
public void deregister(Long userId, Integer tenantId) {
User user = userRepository.findById(userId);
User user = userRepository.findByIdAndTenantId(userId,tenantId);
if (Objects.isNull(user)) {
throw new UserRegisterLoginException("用户不存在");
......@@ -498,7 +494,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
/* 保存用户销户记录 */
userDeregisterService.save(user);
/* 删除用户 */
userRepository.deleteById(userId);
userRepository.deleteByIdAndTenantId(userId,tenantId);
/* 删除用户附加信息 */
userAttachedRepository.deleteByUserId(userId);
......@@ -506,24 +502,24 @@ public class UserServiceImpl implements IUserService, IBaseController {
userBtRegisterRepository.deleteByUserId(userId);
/* 清空session */
sessionService.deleteByUserId(user.getId());
sessionService.deleteByUserId(user.getId(),tenantId);
/* 清空缓存 */
sessionService.deleteUserCatch(user);
sessionService.deleteUserCatch(user,tenantId);
/* 禁用微信 Or 删除?*/
// wechatService.forbiddenXyqbAndWuxiUserByUserId(user.getId());
weChatUserRepository.deleteByUserId(userId);
weChatUserRepository.deleteByUserIdAndAppIdAndTenantId(userId,tenantId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public User submitModifyPhone(String prevPhoneNo, String curPhoneNo) {
public User submitModifyPhone(String prevPhoneNo, String curPhoneNo, Integer tenantId) {
//1. 判断新手机号是否存在
User newPhoneUser = findByPhoneInDb(curPhoneNo);
User newPhoneUser = findByPhoneInDb(curPhoneNo,tenantId);
if (Objects.nonNull(newPhoneUser)) {
//新手机号已存在
throw new DataException("新手机号存在, 用户修改手机号后新手机号注册了。");
}
User oldPhoneUser = findByPhoneInDb(prevPhoneNo);
User oldPhoneUser = findByPhoneInDb(prevPhoneNo,tenantId);
if (Objects.isNull(oldPhoneUser)) {
throw new DataException("旧手机号不存在, 可能已经修改成功了。");
}
......@@ -545,7 +541,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
* @param user
* @param loginFrom
*/
public void channelUserSignContract(User user, Long loginFrom) {
public void channelUserSignContract(User user, Long loginFrom,Integer tenantId) {
if (Objects.isNull(user) || StringUtils.isBlank(channelTemplate)) {
return;
}
......
......@@ -9,13 +9,13 @@ import java.util.List;
* Created by Miraculous on 2017/1/19.
*/
public interface IWechatService {
AccessTokenResponse getToken(String code);
AccessTokenResponse getToken(String code,String appId,Integer tenantId);
WechatUserInfo getWechatUserInfoFromWechatServer(String token, String openId);
WechatUserInfo getWechatUserInfoFromWechatServer(String token, String openId,String appId,Integer tenantId);
WechatUserInfo findWechatUserInfoFromDb(String openId);
WechatUserInfo findWechatUserInfoFromDb(String openId,String appId,Integer tenantId);
WechatUserInfo findWechatUserInfoByPhoneNo(String phoneNo);
WechatUserInfo findWechatUserInfoByPhoneNo(String phoneNo, Integer tenantId);
WechatUserInfo saveWechatUserInfo(WechatUserInfo userInfo);
......@@ -27,7 +27,7 @@ public interface IWechatService {
* @param openId - 微信标识
* @return
*/
int relateUser(Long userId, String phoneNo, String openId);
int relateUser(Long userId, String phoneNo, String openId,String appId,Integer tenantId);
/**
* 按userId查微信信息
......@@ -36,25 +36,18 @@ public interface IWechatService {
* @param userId - 用户标识
* @return
*/
WechatUserInfo queryByUserId(Long userId);
WechatUserInfo queryByUserId(Long userId,Integer tenantId);
WechatUserInfo queryByUserId(Long userId, String appName);
WechatUserInfo queryByUserId(Long userId, String appName,String appId,Integer tenantId);
int forbiddenUserWeChat(Long userId);
int forbiddenUserWeChat(Long userId, Integer tenantId);
/**
* 通过userId解除商城用户与小程序和公众号关联关系
*
* @param userId 用户id
* @return 禁用结果
*/
int forbiddenXyqbAndWuxiUserByUserId(Long userId);
List<WechatUserInfo> queryListByUserId(Long userId);
List<WechatUserInfo> queryListByUserId(Long userId,Integer tenantId);
List<WechatUserInfo> queryListByUnionId(String unionId);
List<WechatUserInfo> queryListByUnionId(String unionId,Integer tenantId);
List<WechatUserInfo> queryListByUnionIds(List<String> unionIds);
List<WechatUserInfo> queryListByUnionIds(List<String> unionIds,Integer tenantId);
List<WechatUserInfo> queryByUserIdsAndAppName(List<Long> userIds, String appName);
List<WechatUserInfo> queryByUserIdsAndAppName(List<Long> userIds, String appName,Integer tenantId);
}
......@@ -56,7 +56,7 @@ public class WechatServiceImpl implements IWechatService {
}
@Override
public AccessTokenResponse getToken(String code) {
public AccessTokenResponse getToken(String code,String appId,Integer tenantId) {
if (StringUtils.isEmpty(code)) {
return null;
}
......@@ -101,7 +101,7 @@ public class WechatServiceImpl implements IWechatService {
}
@Override
public WechatUserInfo getWechatUserInfoFromWechatServer(String token, String openId) {
public WechatUserInfo getWechatUserInfoFromWechatServer(String token, String openId,String appId,Integer tenantId) {
if (StringUtils.isEmpty(token) || StringUtils.isEmpty(openId)) {
return null;
}
......@@ -112,8 +112,8 @@ public class WechatServiceImpl implements IWechatService {
}
@Override
public WechatUserInfo findWechatUserInfoFromDb(String openId) {
return weChatUserRepository.findByOpenIdAndAppName(openId, "xyqb");
public WechatUserInfo findWechatUserInfoFromDb(String openId,String appId,Integer tenantId) {
return weChatUserRepository.findByOpenIdAndAppNameAndAppIdAndTenantId(openId, "xyqb",appId,tenantId);
}
@Override
......@@ -123,10 +123,10 @@ public class WechatServiceImpl implements IWechatService {
if (Objects.isNull(userInfo) || Objects.isNull(userInfo.getOpenId())) {
return null;
}
long count = weChatUserRepository.countByOpenIdAndAppName(userInfo.getOpenId(), "xyqb");
long count = weChatUserRepository.countByOpenIdAndAppNameAndAppIdAndTenantId(userInfo.getOpenId(), "xyqb",userInfo.getAppId(),userInfo.getTenantId());
if (count > 0) {
//注意,这里会抛异常(5000/total),WeChatController中已捕获处理
return weChatUserRepository.findByOpenIdAndAppName(userInfo.getOpenId(), "xyqb");
return weChatUserRepository.findByOpenIdAndAppNameAndAppIdAndTenantId(userInfo.getOpenId(), "xyqb",userInfo.getAppId(),userInfo.getTenantId());
}
if (null == userInfo.getPhoneNo()) {
userInfo.setPhoneNo("");
......@@ -156,24 +156,24 @@ public class WechatServiceImpl implements IWechatService {
@Override
@Transactional(rollbackFor = Exception.class)
public int relateUser(Long userId, String phoneNo, String openId) {
public int relateUser(Long userId, String phoneNo, String openId,String appId,Integer tenantId) {
if (Objects.isNull(userId) || Objects.isNull(openId) || StringUtils.isBlank(openId)) {
log.error("微信关联失败:非法入参:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
return 0;
}
// Old - 当前openId的WechatUserInfo
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppName(openId, "xyqb");
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppNameAndAppIdAndTenantId(openId, "xyqb",appId,tenantId);
if (Objects.nonNull(wechatUserInfo) && Objects.equals(userId, wechatUserInfo.getUserId()) && Objects.equals(openId, wechatUserInfo.getOpenId())) {
log.info("微信关联成功:重复关联:跳过:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
return 1;
}
// 强制解除关联
int dissociate = weChatUserRepository.dissociateUser(openId, userId, "xyqb");
int dissociate = weChatUserRepository.dissociateUser(openId, userId, "xyqb",appId,tenantId);
if (dissociate < 1) {
log.error("微信关联失败:解绑条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
throw new WechatRelateUserException("微信关联失败");
}
int relate = weChatUserRepository.relateUser(userId, Optional.ofNullable(phoneNo).orElse(""), openId, "xyqb");
int relate = weChatUserRepository.relateUser(userId, Optional.ofNullable(phoneNo).orElse(""), openId, "xyqb",appId,tenantId);
if (relate < 1) {
log.error("微信关联失败:绑定条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
throw new WechatRelateUserException("微信关联失败");
......@@ -189,13 +189,13 @@ public class WechatServiceImpl implements IWechatService {
}
@Override
public WechatUserInfo findWechatUserInfoByPhoneNo(String phoneNo) {
public WechatUserInfo findWechatUserInfoByPhoneNo(String phoneNo, Integer tenantId) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return null;
}
WechatUserInfo userInfo = weChatUserRepository.findByEncryptedPhoneNoAndAppName(phoneNo, "xyqb");
WechatUserInfo userInfo = weChatUserRepository.findByEncryptedPhoneNoAndAppNameAndTenantId(phoneNo, "xyqb", tenantId);
if (userInfo == null) {
userInfo = weChatUserRepository.findByPhoneNoAndAppName(phoneNo, "xyqb");
userInfo = weChatUserRepository.findByPhoneNoAndAppNameAndTenantId(phoneNo, "xyqb", tenantId);
}
return userInfo;
}
......@@ -224,8 +224,8 @@ public class WechatServiceImpl implements IWechatService {
* @TODO 2021-10-14 修改 findByUserIdAndAppName 为 findFirstByUserIdAndAppNameOrderByCreatedAtDesc, 原因是存在有多个数据情况
*/
@Override
public WechatUserInfo queryByUserId(Long userId) {
return weChatUserRepository.findFirstByUserIdAndAppNameOrderByCreatedAtDesc(userId, "xyqb");
public WechatUserInfo queryByUserId(Long userId,Integer tenantId) {
return weChatUserRepository.findFirstByUserIdAndAppNameAndTenantIdOrderByCreatedAtDesc(userId, "xyqb",tenantId);
}
/**
......@@ -234,41 +234,37 @@ public class WechatServiceImpl implements IWechatService {
* @return
* @TODO 2021-10-14 修改 findByUserIdAndAppName 为 findFirstByUserIdAndAppNameOrderByCreatedAtDesc, 原因是存在有多个数据情况
*/
public WechatUserInfo queryByUserId(Long userId, String appName) {
public WechatUserInfo queryByUserId(Long userId, String appName,String appId,Integer tenantId) {
if (appName == null || "".equals(appName.trim())) {
appName = "xyqb";
}
return weChatUserRepository.findFirstByUserIdAndAppNameOrderByCreatedAtDesc(userId, appName);
return weChatUserRepository.findFirstByUserIdAndAppNameAndTenantIdOrderByCreatedAtDesc(userId, appName, tenantId);
}
@Override
public int forbiddenUserWeChat(Long userId) {
return weChatUserRepository.dissociateByUserIdAndAppName(userId, "xyqb");
public int forbiddenUserWeChat(Long userId, Integer tenantId) {
return weChatUserRepository.dissociateByUserIdAndAppNameAndTenantId(userId, "xyqb",tenantId);
}
@Override
public int forbiddenXyqbAndWuxiUserByUserId(Long userId) {
return weChatUserRepository.forbiddenXyqbAndWuxiUserByUserId(userId);
}
@Override
public List<WechatUserInfo> queryListByUserId(Long userId) {
return weChatUserRepository.findByUserId(userId);
public List<WechatUserInfo> queryListByUserId(Long userId,Integer tenantId) {
return weChatUserRepository.findByUserIdAndTenantId(userId,tenantId);
}
@Override
public List<WechatUserInfo> queryListByUnionId(String unionId) {
return weChatUserRepository.findByUnionId(unionId);
public List<WechatUserInfo> queryListByUnionId(String unionId,Integer tenantId) {
return weChatUserRepository.findByUnionIdAndAppIdAndTenantId(unionId,tenantId);
}
@Override
public List<WechatUserInfo> queryListByUnionIds(List<String> unionIds) {
return weChatUserRepository.findByUnionIdIn(unionIds);
public List<WechatUserInfo> queryListByUnionIds(List<String> unionIds,Integer tenantId) {
return weChatUserRepository.findByUnionIdInAndTenantId(unionIds,tenantId);
}
@Override
public List<WechatUserInfo> queryByUserIdsAndAppName(List<Long> userIds, String appName) {
return weChatUserRepository.findByUserIdInAndAppName(userIds, appName);
public List<WechatUserInfo> queryByUserIdsAndAppName(List<Long> userIds, String appName,Integer tenantId) {
return weChatUserRepository.findByUserIdInAndAppNameAndTenantId(userIds, appName,tenantId);
}
}
......@@ -3,6 +3,7 @@ package demo;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.config.data.JpaConfig;
import cn.quantgroup.xyqb.config.data.RedisConfig;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.controller.external.UserController;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.service.user.IUserService;
......@@ -68,7 +69,7 @@ public class MockMvcTest {
String phone = "13461067662";
User user = new User();
user.setPhoneNo(phone);
given(userService.findByPhoneInDb(phone)).willReturn(user);
given(userService.findByPhoneInDb(phone, UserConstant.defaultTenantId)).willReturn(user);
mvc.perform(get("/log/list").accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk()).andExpect(content().string("Honda Civic"));
}
......
......@@ -2,6 +2,7 @@ package demo;
import cn.quantgroup.xyqb.config.data.JpaConfig;
import cn.quantgroup.xyqb.config.data.RedisConfig;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.repository.IUserRepository;
import com.ctrip.framework.apollo.spring.config.ApolloPropertySourceInitializer;
......@@ -43,7 +44,7 @@ public class RepsitoryJpaTest {
String phone = "13461067662";
User user = new User();
user = userRepository.save(user);
User userRep = userRepository.findByPhoneNo(phone);
User userRep = userRepository.findByPhoneNoAndTenantId(phone, UserConstant.defaultTenantId);
Assert.assertEquals(user, userRep);
}
......@@ -57,7 +58,7 @@ public class RepsitoryJpaTest {
user.setCreatedAt(LocalDateTime.now());
user.setUpdatedAt(user.getCreatedAt());
user = userRepository.save(user);
User userRep = userRepository.findByPhoneNo(phone);
User userRep = userRepository.findByPhoneNoAndTenantId(phone, UserConstant.defaultTenantId);
Assert.assertEquals(user, userRep);
}
......
package demo;
import cn.quantgroup.xyqb.Bootstrap;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.repository.IUserRepository;
import com.ctrip.framework.apollo.spring.config.ApolloPropertySourceInitializer;
......@@ -38,7 +39,7 @@ public class RepsitoryTest extends AbstractTransactionalJUnit4SpringContextTests
String phone = "13461067662";
User user = new User();
user = userRepository.save(user);
User userRep = userRepository.findByPhoneNo(phone);
User userRep = userRepository.findByPhoneNoAndTenantId(phone,UserConstant.defaultTenantId);
Assert.assertEquals(user, userRep);
}
......@@ -52,7 +53,7 @@ public class RepsitoryTest extends AbstractTransactionalJUnit4SpringContextTests
user.setCreatedAt(LocalDateTime.now());
user.setUpdatedAt(LocalDateTime.now());
user = userRepository.save(user);
User userRep = userRepository.findByPhoneNo(phone);
User userRep = userRepository.findByPhoneNoAndTenantId(phone,UserConstant.defaultTenantId);
Assert.assertEquals(user, userRep);
}
......
package demo;
import cn.quantgroup.xyqb.Bootstrap;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.service.user.IUserService;
import com.ctrip.framework.apollo.spring.config.ApolloPropertySourceInitializer;
......@@ -37,7 +38,7 @@ public class ServiceTest extends AbstractTransactionalJUnit4SpringContextTests {
String phone = "13461067662";
User user = new User();
user = userService.saveUser(user);
User userRep = userService.findByPhoneInDb(phone);
User userRep = userService.findByPhoneInDb(phone, UserConstant.defaultTenantId);
Assert.assertEquals(user, userRep);
}
......@@ -51,7 +52,7 @@ public class ServiceTest extends AbstractTransactionalJUnit4SpringContextTests {
user.setCreatedAt(LocalDateTime.now());
user.setUpdatedAt(user.getCreatedAt());
user = userService.saveUser(user);
User userRep = userService.findByPhoneInDb(phone);
User userRep = userService.findByPhoneInDb(phone, UserConstant.defaultTenantId);
Assert.assertEquals(user, userRep);
}
......
......@@ -3,6 +3,7 @@ package login;
import cn.quantgroup.tool.monitor.metric.api.TechHttpClient;
import cn.quantgroup.xyqb.Bootstrap;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.controller.external.UserController;
import cn.quantgroup.xyqb.controller.internal.user.InnerController;
import cn.quantgroup.xyqb.model.AuthBean;
......@@ -74,7 +75,7 @@ public class UserLoginTest {
String ip = "172.16.0.1";
request.addHeader("x-original-client-ip", ip);
request.addHeader("authorization", "Basic MTg1MTMzNDE4MDg6MTIzNDU2");
JsonResult jsonResult = userController.login(channelId, appChannel, createFrom, userId, "xyqb", "xyqb", null, request);
JsonResult jsonResult = userController.login(channelId, appChannel, createFrom, userId, "xyqb", "xyqb", null, request, "",UserConstant.defaultTenantId);
AuthBean authBean = (AuthBean) jsonResult.getData();
String token = authBean.getToken();
System.out.println("user token:" + token);
......
......@@ -31,19 +31,6 @@ public class WechatTest {
@Test
public void test(){
WechatUserInfo xyqb = weChatUserRepository.findByOpenIdAndAppName("ou5l71eY3oO0oM88I-fp3pfC9sQg", "xyqb");
log.info("xyqb:{} ",xyqb);
WechatUserInfo xyqb1 = weChatUserRepository.findByUserIdAndAppName(58847276L, "xyqb");
log.info("xyqb1:{} ",xyqb1);
WechatUserInfo xyqb2 = weChatUserRepository.findByPhoneNoAndAppName("13718195234", "xyqb");
log.info("xyqb2:{} ",xyqb2);
long xyqb3 = weChatUserRepository.countByOpenIdAndAppName("ou5l71eY3oO0oM88I-fp3pfC9sQg", "xyqb");
log.info("xyqb3:{} ",xyqb3);
// int xyqb4 = weChatUserRepository.dissociateByUserIdAndAppName(58847276L, "xyqb");
// log.info("xyqb4:{} ",xyqb4);
int i = weChatUserRepository.dissociateUser("ou5l71UOXLkIXNz0dtW1znJSTwR0", 58847276L, "xyqb");
log.info("xyqb5:{} ",i);
}
......
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