From 0c12c12b65ef9c0d95b26720d0c640ef3e29c662 Mon Sep 17 00:00:00 2001 From: dftre <3066417822@qq.com> Date: Mon, 17 Mar 2025 17:57:50 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20SQL=20=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5=E4=B8=AD=E7=9A=84=E8=A1=A8=E5=88=AB=E5=90=8D=E5=BC=95?= =?UTF-8?q?=E7=94=A8=EF=BC=8C=E4=BB=A5=E6=94=AF=E6=8C=81=E5=AD=90=E5=88=97?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-models/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-models/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm index cc5ead7..f7866f4 100644 --- a/ruoyi-models/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm +++ b/ruoyi-models/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -87,7 +87,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #if($table.haveSubColumn == '1') where ${pkColumn.columnName} = #{${pkColumn.javaField}} #else - where ${tableName}.${pkColumn.columnName} = #{${pkColumn.javaField}} +#set($tableAlias=$table.tableAlias) + where ${tableAlias}.${pkColumn.columnName} = #{${pkColumn.javaField}} #end #elseif($table.sub) select#foreach($column in $columns) a.$column.columnName#if($foreach.count != $columns.size()),#end#end, From 2a63e301a3c588afb428846e7f2669beda3f7ad9 Mon Sep 17 00:00:00 2001 From: Dftre <3066417822@qq.com> Date: Thu, 20 Mar 2025 23:48:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E9=82=AE=E7=AE=B1=E5=92=8C=E6=89=8B=E6=9C=BA=E5=8F=B7=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E7=99=BB=E5=BD=95=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/登录+JWT逻辑.drawio | 95 +++++++++---------- .../ruoyi/auth/common/service/TfaService.java | 4 + .../ruoyi/auth/controller/TfaController.java | 15 +++ .../email/service/impl/MailServiceImpl.java | 28 +++--- .../phone/service/Impl/DySmsServiceImpl.java | 28 +++--- 5 files changed, 94 insertions(+), 76 deletions(-) diff --git a/doc/登录+JWT逻辑.drawio b/doc/登录+JWT逻辑.drawio index 8fa83e7..9d05d20 100644 --- a/doc/登录+JWT逻辑.drawio +++ b/doc/登录+JWT逻辑.drawio @@ -1,6 +1,6 @@ - + @@ -8,131 +8,122 @@ - + - + - + - + - + - - + + - - + + - + - - + + - - - - - + + - + - - + + - - + + - + - - + + + + - - + + - - + + - + - - - - - - - - - + - - + + - + - + - - + + - + - - + + - + - + - + diff --git a/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java b/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java index 6722274..be672f3 100644 --- a/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java +++ b/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java @@ -11,4 +11,8 @@ public interface TfaService { public void doRegister(RegisterBody registerBody); public void doRegisterVerify(RegisterBody registerBody); + + public void doLogin(LoginBody loginBody); + + public String doLoginVerify(LoginBody loginBody); } diff --git a/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java b/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java index 79ed279..0f8ee36 100644 --- a/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java +++ b/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java @@ -67,4 +67,19 @@ public class TfaController extends BaseController { tfaService.doRegisterVerify(registerBody); return success(); } + + @PostMapping("/send/login") + @Anonymous + public AjaxResult sendLogin(@PathVariable String channel, @RequestBody LoginBody loginBody) { + TfaService tfaService = tfaServiceMap.get(channel + "AuthService"); + tfaService.doLogin(loginBody); + return success(); + } + + @PostMapping("/verify/login") + @Anonymous + public AjaxResult verifyLogin(@PathVariable String channel, @RequestBody LoginBody loginBody) { + TfaService tfaService = tfaServiceMap.get(channel + "AuthService"); + return success(tfaService.doLoginVerify(loginBody)); + } } diff --git a/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java b/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java index bc22f76..062b7cb 100644 --- a/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java +++ b/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java @@ -10,14 +10,19 @@ import org.springframework.stereotype.Service; import com.ruoyi.auth.common.enums.OauthVerificationUse; import com.ruoyi.auth.common.utils.RandomCodeUtil; import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.framework.web.service.UserDetailsServiceImpl; import com.ruoyi.system.service.ISysUserService; @@ -33,6 +38,8 @@ public class MailServiceImpl implements IMailService { private TokenService tokenService; @Autowired private UserDetailsServiceImpl userDetailsServiceImpl; + @Autowired + private SysLoginService sysLoginService; private static final Logger log = LoggerFactory.getLogger(MailServiceImpl.class); @@ -65,30 +72,25 @@ public class MailServiceImpl implements IMailService { return isValid; } - public void doLogin(LoginBody loginBody, boolean isRegister) { + public void doLogin(LoginBody loginBody) { SysUser sysUser = userService.selectUserByEmail(loginBody.getEmail()); - if (sysUser == null && !isRegister) { + if (sysUser == null) { throw new ServiceException("该邮箱未绑定用户"); } else { sendCode(loginBody.getEmail(), RandomCodeUtil.numberCode(6), OauthVerificationUse.LOGIN); } } - public String doLoginVerify(LoginBody loginBody, boolean isRegister) { + public String doLoginVerify(LoginBody loginBody) { if (checkCode(loginBody.getEmail(), loginBody.getCode(), OauthVerificationUse.LOGIN)) { SysUser sysUser = userService.selectUserByEmail(loginBody.getEmail()); if (sysUser == null) { - if (isRegister) { - sysUser = new SysUser(); - sysUser.setUserName(loginBody.getEmail()); - sysUser.setPassword(SecurityUtils.encryptPassword(RandomCodeUtil.code(16))); - sysUser.setEmail(loginBody.getEmail()); - userService.registerUser(sysUser); - } else { - throw new ServiceException("该邮箱未绑定用户"); - } + throw new ServiceException("该邮箱未绑定用户"); } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, + MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) userDetailsServiceImpl.createLoginUser(sysUser); + sysLoginService.recordLoginInfo(loginUser.getUserId()); return tokenService.createToken(loginUser); } else { throw new ServiceException("验证码错误"); @@ -112,6 +114,8 @@ public class MailServiceImpl implements IMailService { sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword())); sysUser.setEmail(registerBody.getEmail()); userService.registerUser(sysUser); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.REGISTER, + MessageUtils.message("user.register.success"))); } else { throw new ServiceException("验证码错误"); } diff --git a/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java b/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java index d3e4d28..2a69aa6 100644 --- a/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java +++ b/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java @@ -11,14 +11,19 @@ import com.alibaba.fastjson2.JSONObject; import com.ruoyi.auth.common.enums.OauthVerificationUse; import com.ruoyi.auth.common.utils.RandomCodeUtil; import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.framework.web.service.UserDetailsServiceImpl; import com.ruoyi.system.service.ISysUserService; @@ -41,6 +46,8 @@ public class DySmsServiceImpl implements DySmsService { private UserDetailsServiceImpl userDetailsServiceImpl; @Autowired private TokenService tokenService; + @Autowired + private SysLoginService sysLoginService; private static final Logger log = LoggerFactory.getLogger(DySmsServiceImpl.class); @@ -75,30 +82,25 @@ public class DySmsServiceImpl implements DySmsService { return isValid; } - public void doLogin(LoginBody loginBody, boolean isRegister) { + public void doLogin(LoginBody loginBody) { SysUser sysUser = userService.selectUserByPhone(loginBody.getPhonenumber()); - if (sysUser == null && !isRegister) { + if (sysUser == null) { throw new ServiceException("该手机号未绑定用户"); } else { sendCode(loginBody.getPhonenumber(), RandomCodeUtil.numberCode(6), OauthVerificationUse.LOGIN); } } - public String doLoginVerify(LoginBody loginBody, boolean isRegister) { + public String doLoginVerify(LoginBody loginBody) { if (checkCode(loginBody.getPhonenumber(), loginBody.getCode(), OauthVerificationUse.LOGIN)) { SysUser sysUser = userService.selectUserByPhone(loginBody.getPhonenumber()); if (sysUser == null) { - if (isRegister) { - sysUser = new SysUser(); - sysUser.setUserName(loginBody.getPhonenumber()); - sysUser.setPassword(SecurityUtils.encryptPassword(RandomCodeUtil.code(16))); - sysUser.setPhonenumber(loginBody.getPhonenumber()); - userService.registerUser(sysUser); - } else { - throw new ServiceException("该手机号未绑定用户"); - } + throw new ServiceException("该手机号未绑定用户"); } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, + MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) userDetailsServiceImpl.createLoginUser(sysUser); + sysLoginService.recordLoginInfo(loginUser.getUserId()); return tokenService.createToken(loginUser); } else { throw new ServiceException("验证码错误"); @@ -122,6 +124,8 @@ public class DySmsServiceImpl implements DySmsService { sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword())); sysUser.setPhonenumber(registerBody.getPhonenumber()); userService.registerUser(sysUser); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.REGISTER, + MessageUtils.message("user.register.success"))); } else { throw new ServiceException("验证码错误"); } From 5b6e183713a66d25f20bdd09f1ff8aa89d24ec15 Mon Sep 17 00:00:00 2001 From: dftre <3066417822@qq.com> Date: Fri, 21 Mar 2025 10:06:14 +0800 Subject: [PATCH 3/3] =?UTF-8?q?GenTableVo=E7=A7=BB=E9=99=A4=E5=AF=B9?= =?UTF-8?q?=E5=85=B3=E8=81=94=E9=83=A8=E5=88=86=E7=9A=84=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 12 ++++++++++++ .../com/ruoyi/generator/domain/vo/GenTableVo.java | 3 +-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index c7dbe17..38674ba 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -51,6 +51,18 @@ "password": "123456", "savePassword": "secretStorage", "connectionTimeout": 30 + }, + { + "connectionId": "fNsY4HlOb21w_5TnIGy_d", + "name": "localhost", + "driver": "redis", + "connectionType": "host", + "host": "127.0.0.1", + "port": 6379, + "ssl": false, + "savePassword": "na", + "readOnly": false, + "connectionTimeout": 30 } ], } \ No newline at end of file diff --git a/ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/vo/GenTableVo.java b/ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/vo/GenTableVo.java index a5b9eb1..f9232fc 100644 --- a/ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/vo/GenTableVo.java +++ b/ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/vo/GenTableVo.java @@ -28,6 +28,7 @@ public class GenTableVo extends BaseEntity { private static final long serialVersionUID = 1L; /** 业务表 */ + @Valid private GenTable table; /** 业务表的列 */ @@ -39,11 +40,9 @@ public class GenTableVo extends BaseEntity { private List joinTablesMate; /** 参与关联的表 */ - @Valid private Collection joinTables; /** 参与关联的列 */ - @Valid private List joinColumns; public List getAllGenTables() {