From 3d8e44add3bbe5eab685436a5324164346980845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=A1=BA=E4=B8=9C?= <577732344@qq.com> Date: Sun, 11 Jan 2026 20:33:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=BF=E7=AD=96=E7=9B=B8=E5=85=B3=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 22 ++++++++ .../common/core/domain/model/LoginBody.java | 13 +++++ .../web/service/SysLoginService.java | 55 +++++++++++++++++++ 3 files changed, 90 insertions(+) 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; + } }