|
|
|
|
@ -489,6 +489,16 @@ public class UserCenterServiceImpl extends ServiceImpl<UserDao, User> implements
|
|
|
|
|
return systemConfigService.getValueByKey(Constants.CONFIG_KEY_MOBILE_LOGIN_LOGO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 小程序微信登录是否强制获取手机号
|
|
|
|
|
* 系统配置 routine_login_require_phone:1=开启(默认),0=关闭(走账号密码绑定)
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public String getRoutineLoginRequirePhone() {
|
|
|
|
|
String value = systemConfigService.getValueByKey(Constants.CONFIG_KEY_ROUTINE_LOGIN_REQUIRE_PHONE);
|
|
|
|
|
return StrUtil.isBlank(value) ? "1" : value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 小程序登录
|
|
|
|
|
* @param code String 前端临时授权code
|
|
|
|
|
@ -854,6 +864,79 @@ public class UserCenterServiceImpl extends ServiceImpl<UserDao, User> implements
|
|
|
|
|
return loginResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 小程序微信绑定已有账号(账号+密码)
|
|
|
|
|
* 关闭「强制获取手机号」时,新微信用户通过已有账号完成关联,下次可直接微信登录
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public LoginResponse registerBindingAccount(WxBindingAccountRequest request) {
|
|
|
|
|
Object cache = redisUtil.get(request.getKey());
|
|
|
|
|
if (ObjectUtil.isNull(cache)) {
|
|
|
|
|
throw new CrmebException("微信授权已过期,请重新点击微信登录");
|
|
|
|
|
}
|
|
|
|
|
RegisterThirdUserRequest registerThirdUserRequest = JSONObject.parseObject(cache.toString(), RegisterThirdUserRequest.class);
|
|
|
|
|
if (!Constants.USER_LOGIN_TYPE_PROGRAM.equals(registerThirdUserRequest.getType())) {
|
|
|
|
|
throw new CrmebException("仅支持小程序微信绑定");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
User user = userService.getByPhone(request.getAccount());
|
|
|
|
|
if (ObjectUtil.isNull(user)) {
|
|
|
|
|
throw new CrmebException("此账号未注册");
|
|
|
|
|
}
|
|
|
|
|
if (!user.getStatus()) {
|
|
|
|
|
throw new CrmebException("此账号被禁用");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String encryptedPassword = CrmebUtil.encryptPassword(request.getPassword(), request.getAccount());
|
|
|
|
|
if (!user.getPwd().equals(encryptedPassword)) {
|
|
|
|
|
throw new CrmebException("密码错误");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UserToken boundByUser = userTokenService.getTokenByUserId(user.getUid(), Constants.THIRD_LOGIN_TOKEN_TYPE_PROGRAM);
|
|
|
|
|
if (ObjectUtil.isNotNull(boundByUser)) {
|
|
|
|
|
throw new CrmebException("该账号已绑定微信小程序");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UserToken boundByOpenId = userTokenService.getByOpenidAndType(
|
|
|
|
|
registerThirdUserRequest.getOpenId(), Constants.THIRD_LOGIN_TOKEN_TYPE_PROGRAM);
|
|
|
|
|
if (ObjectUtil.isNotNull(boundByOpenId)) {
|
|
|
|
|
throw new CrmebException("该微信已绑定其他账号");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
User finalUser = user;
|
|
|
|
|
Boolean execute = transactionTemplate.execute(e -> {
|
|
|
|
|
userTokenService.bind(
|
|
|
|
|
registerThirdUserRequest.getOpenId(),
|
|
|
|
|
Constants.THIRD_LOGIN_TOKEN_TYPE_PROGRAM,
|
|
|
|
|
finalUser.getUid());
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
});
|
|
|
|
|
if (!execute) {
|
|
|
|
|
throw new CrmebException("绑定微信失败,请稍后重试");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ObjectUtil.isNotNull(registerThirdUserRequest.getSpreadPid()) && registerThirdUserRequest.getSpreadPid() > 0) {
|
|
|
|
|
loginService.bindSpread(user, registerThirdUserRequest.getSpreadPid());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
user.setLastLoginTime(DateUtil.nowDateTime());
|
|
|
|
|
userService.updateById(user);
|
|
|
|
|
redisUtil.delete(request.getKey());
|
|
|
|
|
|
|
|
|
|
LoginResponse loginResponse = new LoginResponse();
|
|
|
|
|
try {
|
|
|
|
|
loginResponse.setToken(tokenComponent.createToken(user));
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.error(StrUtil.format("绑定微信账号后生成token失败,uid={}", user.getUid()));
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
loginResponse.setType("login");
|
|
|
|
|
loginResponse.setUid(user.getUid());
|
|
|
|
|
loginResponse.setNikeName(user.getNickname());
|
|
|
|
|
loginResponse.setPhone(user.getPhone());
|
|
|
|
|
return loginResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 用户积分记录列表
|
|
|
|
|
* @param pageParamRequest 分页参数
|
|
|
|
|
|