diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 95919c4..37caa1e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -236,4 +236,26 @@ public class SysLoginController } } + /** + * 登录注册二合一接口 + * 根据手机号查询用户,存在则登录,不存在则注册后登录 + * @param loginBody 包含姓名(必填)、电话(必填,放在username字段)、身份证(非必填) + * @return 结果 + */ + @ApiOperation("登录注册二合一") + @PostMapping("/app/loginOrRegister") + public AjaxResult loginOrRegister(@RequestBody LoginBody loginBody) + { + if (loginBody == null) { + return AjaxResult.error("登录参数不能为空!"); + } + if (StringUtils.isBlank(loginBody.getUsername())) { + return AjaxResult.error("电话号码不能为空!"); + } + if (StringUtils.isBlank(loginBody.getName())) { + return AjaxResult.error("姓名不能为空!"); + } + return loginService.loginOrRegister(loginBody); + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java index d568985..694700b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java @@ -44,6 +44,11 @@ public class LoginBody */ private String idCard; + /** + * 姓名 + */ + private String name; + public String getUsername() { return username; @@ -115,4 +120,12 @@ public class LoginBody public void setIdCard(String idCard) { this.idCard = idCard; } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 46666cd..4ce4eb4 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -745,4 +745,59 @@ public class SysLoginService ajax.put("isCompanyUser",appUser.getIsCompanyUser()); return ajax; } + + /** + * 登录注册二合一接口 + * 根据手机号查询用户,存在则登录,不存在则注册后登录 + * @param loginBody 包含姓名(必填)、电话(必填)、身份证(非必填) + * @return + */ + @Transactional(rollbackFor = Exception.class) + public AjaxResult loginOrRegister(LoginBody loginBody) { + String phone = loginBody.getUsername(); + String name = loginBody.getName(); + String idCard = loginBody.getIdCard(); + + // 根据手机号查询用户 + AppUser appUser = appUserService.getPhone(phone); + boolean isNewUser = false; + + if (appUser == null) { + // 用户不存在,执行注册 + appUser = new AppUser(); + appUser.setPhone(phone); + appUser.setName(name); + appUser.setIdCard(idCard); + appUser.setLoginDate(new Date()); + appUserService.insertAppUser(appUser); + isNewUser = true; + } else { + // 用户存在,更新信息(如果传入了新值) + AppUser updateParam = new AppUser(); + updateParam.setUserId(appUser.getUserId()); + boolean needUpdate = false; + if (StringUtils.isNotBlank(name) && !name.equals(appUser.getName())) { + updateParam.setName(name); + appUser.setName(name); + needUpdate = true; + } + if (StringUtils.isNotBlank(idCard) && !idCard.equals(appUser.getIdCard())) { + updateParam.setIdCard(idCard); + appUser.setIdCard(idCard); + needUpdate = true; + } + updateParam.setLoginDate(new Date()); + if (needUpdate) { + appUserService.updateAppUser(updateParam); + } + } + + // 生成token并返回 + String token = loginUserIdApp(appUser); + AjaxResult ajax = AjaxResult.success(); + ajax.put(Constants.TOKEN, token); + ajax.put("isNewUser", isNewUser); + ajax.put("idCard", appUser.getIdCard()); + return ajax; + } }