From 705747be897f50afa83bf2e0f198b5260b071c5d Mon Sep 17 00:00:00 2001 From: D <3066417822@qq.com> Date: Wed, 14 Feb 2024 16:04:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9E=84=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- ruoyi-admin/pom.xml | 11 +- .../src/main/resources/application-oauth.yml | 28 +- .../src/main/resources/application-pay.yml | 8 + .../src/main/resources/application.yml | 2 +- ruoyi-oauth/pom.xml | 17 ++ .../ruoyi/oauth/common/domain/OauthUser.java | 240 +++++------------- ruoyi-oauth/ruoyi-oauth-email/pom.xml | 28 ++ ruoyi-oauth/ruoyi-oauth-justauth/pom.xml | 2 +- .../service/Impl/OAuthServiceImpl.java | 2 + ruoyi-oauth/ruoyi-oauth-phone/pom.xml | 34 +++ .../oauth/phone/constant/DySmsConstant.java | 29 +++ .../phone/controller/DySmsController.java | 10 + .../oauth/phone/enums/DySmsTemplate.java | 67 +++++ .../oauth/phone/service/DySmsService.java | 5 + .../phone/service/Impl/DySmsServiceImpl.java | 93 +++++++ .../ruoyi/oauth/phone/utils/DySmsUtil.java | 96 +++++++ ruoyi-oauth/ruoyi-oauth-start/pom.xml | 68 +++++ ruoyi-oauth/ruoyi-oauth-wx/pom.xml | 2 +- .../oauth/wx/constant/WxMiniAppConstant.java | 8 +- .../oauth/wx/constant/WxPubConstant.java | 8 +- .../wx/controller/WxLoginController.java | 2 +- ruoyi-pay/pom.xml | 27 +- ruoyi-pay/ruoyi-pay-alipay/pom.xml | 28 ++ ruoyi-pay/ruoyi-pay-sqb/pom.xml | 2 +- .../ruoyi/pay/sqb/constant/SqbConstant.java | 16 +- .../pay/sqb/service/Impl/SQBServiceImpl.java | 2 +- ruoyi-pay/ruoyi-pay-start/pom.xml | 46 ++++ ruoyi-pay/ruoyi-pay-wx/pom.xml | 28 ++ .../ruoyi/system/mapper/SysUserMapper.java | 10 + .../ruoyi/system/service/ISysUserService.java | 20 +- .../service/impl/SysUserServiceImpl.java | 180 +++++-------- .../resources/mapper/system/SysUserMapper.xml | 5 + 33 files changed, 796 insertions(+), 332 deletions(-) create mode 100644 ruoyi-admin/src/main/resources/application-pay.yml create mode 100644 ruoyi-oauth/ruoyi-oauth-email/pom.xml create mode 100644 ruoyi-oauth/ruoyi-oauth-phone/pom.xml create mode 100644 ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/constant/DySmsConstant.java create mode 100644 ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/controller/DySmsController.java create mode 100644 ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/enums/DySmsTemplate.java create mode 100644 ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/DySmsService.java create mode 100644 ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/Impl/DySmsServiceImpl.java create mode 100644 ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/utils/DySmsUtil.java create mode 100644 ruoyi-oauth/ruoyi-oauth-start/pom.xml create mode 100644 ruoyi-pay/ruoyi-pay-alipay/pom.xml create mode 100644 ruoyi-pay/ruoyi-pay-start/pom.xml create mode 100644 ruoyi-pay/ruoyi-pay-wx/pom.xml diff --git a/pom.xml b/pom.xml index ea2c032..0e5333d 100644 --- a/pom.xml +++ b/pom.xml @@ -210,14 +210,14 @@ com.ruoyi - ruoyi-oauth + ruoyi-oauth-start ${ruoyi.version} com.ruoyi - ruoyi-pay + ruoyi-pay-start ${ruoyi.version} diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 6fdd764..d508a37 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -55,11 +55,16 @@ com.ruoyi - ruoyi-oauth-wx - ${ruoyi.version} + ruoyi-oauth-start - + + + com.ruoyi + ruoyi-pay-start + + + com.ruoyi ruoyi-online diff --git a/ruoyi-admin/src/main/resources/application-oauth.yml b/ruoyi-admin/src/main/resources/application-oauth.yml index 8ebaf93..764c5e1 100644 --- a/ruoyi-admin/src/main/resources/application-oauth.yml +++ b/ruoyi-admin/src/main/resources/application-oauth.yml @@ -1,12 +1,18 @@ # 请输入自己的appid和appsecret -wx: - miniapp: - open: true - appId: appId - appSecret: appSecret - url: https://api.weixin.qq.com/sns/jscode2session - pub: - open: true - appId: appId - appSecret: appSecret - url: https://api.weixin.qq.com/sns/oauth2/access_token \ No newline at end of file +oauth: + wx: + miniapp: + open: true + appId: appId + appSecret: appSecret + url: https://api.weixin.qq.com/sns/jscode2session + pub: + open: true + appId: appId + appSecret: appSecret + url: https://api.weixin.qq.com/sns/oauth2/access_token + + phone: + dysms: + appId: appId + appSecret: appSecret diff --git a/ruoyi-admin/src/main/resources/application-pay.yml b/ruoyi-admin/src/main/resources/application-pay.yml new file mode 100644 index 0000000..fb96613 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-pay.yml @@ -0,0 +1,8 @@ +pay: + sqb: + apiDomain: "apiDomain" + terminalSn: "terminalSn" + terminalKey: "terminalKey" + appId: "appId" + vendorSn: "vendorSn" + vendorKey: "vendorKey" \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index eadb9ea..1940abb 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -55,7 +55,7 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: druid,mybatis,oauth + active: druid,mybatis,oauth,pay # 文件上传 servlet: multipart: diff --git a/ruoyi-oauth/pom.xml b/ruoyi-oauth/pom.xml index a6c852e..b12fdf9 100644 --- a/ruoyi-oauth/pom.xml +++ b/ruoyi-oauth/pom.xml @@ -82,6 +82,20 @@ ruoyi-oauth-wx ${ruoyi.version} + + + + com.ruoyi + ruoyi-oauth-phone + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-oauth-email + ${ruoyi.version} + @@ -90,6 +104,9 @@ ruoyi-oauth-common ruoyi-oauth-justauth ruoyi-oauth-wx + ruoyi-oauth-phone + ruoyi-oauth-email + ruoyi-oauth-start pom \ No newline at end of file diff --git a/ruoyi-oauth/ruoyi-oauth-common/src/main/java/com/ruoyi/oauth/common/domain/OauthUser.java b/ruoyi-oauth/ruoyi-oauth-common/src/main/java/com/ruoyi/oauth/common/domain/OauthUser.java index b59d121..7198cc5 100644 --- a/ruoyi-oauth/ruoyi-oauth-common/src/main/java/com/ruoyi/oauth/common/domain/OauthUser.java +++ b/ruoyi-oauth/ruoyi-oauth-common/src/main/java/com/ruoyi/oauth/common/domain/OauthUser.java @@ -15,393 +15,279 @@ import io.swagger.v3.oas.annotations.media.Schema; * @date 2024-01-18 */ @Schema(description = "第三方认证对象") -public class OauthUser extends BaseEntity -{ +public class OauthUser extends BaseEntity { private static final long serialVersionUID = 1L; - /** 主键 */ @Schema(defaultValue = "主键") private Long id; - - - /** 第三方系统的唯一ID,详细解释请参考:名词解释 */ @Schema(defaultValue = "第三方系统的唯一ID,详细解释请参考:名词解释") @Excel(name = "第三方系统的唯一ID,详细解释请参考:名词解释") private String uuid; - - - /** 用户ID */ @Schema(defaultValue = "用户ID") @Excel(name = "用户ID") private Long userId; - - - - /** 第三方用户来源,可选值:GITHUB、GITEE、QQ,更多请参考:AuthDefaultSource.java(opens new window) */ + /** + * 第三方用户来源,可选值:GITHUB、GITEE、QQ,更多请参考:AuthDefaultSource.java(opens new window) + */ @Schema(defaultValue = "第三方用户来源,可选值:GITHUB、GITEE、QQ,更多请参考:AuthDefaultSource.java(opens new window)") @Excel(name = "第三方用户来源,可选值:GITHUB、GITEE、QQ,更多请参考:AuthDefaultSource.java(opens new window)") private String source; - - - /** 用户的授权令牌 */ @Schema(defaultValue = "用户的授权令牌") @Excel(name = "用户的授权令牌") private String accessToken; - - - /** 第三方用户的授权令牌的有效期,部分平台可能没有 */ @Schema(defaultValue = "第三方用户的授权令牌的有效期,部分平台可能没有") @Excel(name = "第三方用户的授权令牌的有效期,部分平台可能没有") private Long expireIn; - - - /** 刷新令牌,部分平台可能没有 */ @Schema(defaultValue = "刷新令牌,部分平台可能没有") @Excel(name = "刷新令牌,部分平台可能没有") private String refreshToken; - - - /** 第三方用户的 open id,部分平台可能没有 */ @Schema(defaultValue = "第三方用户的 open id,部分平台可能没有") @Excel(name = "第三方用户的 open id,部分平台可能没有") private String openId; - - - /** 第三方用户的 ID,部分平台可能没有 */ @Schema(defaultValue = "第三方用户的 ID,部分平台可能没有") @Excel(name = "第三方用户的 ID,部分平台可能没有") private String uid; - - - /** 个别平台的授权信息,部分平台可能没有 */ @Schema(defaultValue = "个别平台的授权信息,部分平台可能没有") @Excel(name = "个别平台的授权信息,部分平台可能没有") private String accessCode; - - - /** 第三方用户的 union id,部分平台可能没有 */ @Schema(defaultValue = "第三方用户的 union id,部分平台可能没有") @Excel(name = "第三方用户的 union id,部分平台可能没有") private String unionId; - - - /** 第三方用户授予的权限,部分平台可能没有 */ @Schema(defaultValue = "第三方用户授予的权限,部分平台可能没有") @Excel(name = "第三方用户授予的权限,部分平台可能没有") private String scope; - - - /** 个别平台的授权信息,部分平台可能没有 */ @Schema(defaultValue = "个别平台的授权信息,部分平台可能没有") @Excel(name = "个别平台的授权信息,部分平台可能没有") private String tokenType; - - - /** id token,部分平台可能没有 */ @Schema(defaultValue = "id token,部分平台可能没有") @Excel(name = "id token,部分平台可能没有") private String idToken; - - - /** 小米平台用户的附带属性,部分平台可能没有 */ @Schema(defaultValue = "小米平台用户的附带属性,部分平台可能没有") @Excel(name = "小米平台用户的附带属性,部分平台可能没有") private String macAlgorithm; - - - /** 小米平台用户的附带属性,部分平台可能没有 */ @Schema(defaultValue = "小米平台用户的附带属性,部分平台可能没有") @Excel(name = "小米平台用户的附带属性,部分平台可能没有") private String macKey; - - - /** 用户的授权code,部分平台可能没有 */ @Schema(defaultValue = "用户的授权code,部分平台可能没有") @Excel(name = "用户的授权code,部分平台可能没有") private String code; - - - /** Twitter平台用户的附带属性,部分平台可能没有 */ @Schema(defaultValue = "Twitter平台用户的附带属性,部分平台可能没有") @Excel(name = "Twitter平台用户的附带属性,部分平台可能没有") private String oauthToken; - - - /** Twitter平台用户的附带属性,部分平台可能没有 */ @Schema(defaultValue = "Twitter平台用户的附带属性,部分平台可能没有") @Excel(name = "Twitter平台用户的附带属性,部分平台可能没有") private String oauthTokenSecret; - - - public void setId(Long id) - { + public void setId(Long id) { this.id = id; } - public Long getId() - { + public Long getId() { return id; } - - public void setUuid(String uuid) - { + public void setUuid(String uuid) { this.uuid = uuid; } - public String getUuid() - { + public String getUuid() { return uuid; } - - public void setUserId(Long userId) - { + public void setUserId(Long userId) { this.userId = userId; } - public Long getUserId() - { + public Long getUserId() { return userId; } - - public void setSource(String source) - { + public void setSource(String source) { this.source = source; } - public String getSource() - { + public String getSource() { return source; } - - public void setAccessToken(String accessToken) - { + public void setAccessToken(String accessToken) { this.accessToken = accessToken; } - public String getAccessToken() - { + public String getAccessToken() { return accessToken; } - - public void setExpireIn(Long expireIn) - { + public void setExpireIn(Long expireIn) { this.expireIn = expireIn; } - public Long getExpireIn() - { + public Long getExpireIn() { return expireIn; } - - public void setRefreshToken(String refreshToken) - { + public void setRefreshToken(String refreshToken) { this.refreshToken = refreshToken; } - public String getRefreshToken() - { + public String getRefreshToken() { return refreshToken; } - - public void setOpenId(String openId) - { + public void setOpenId(String openId) { this.openId = openId; } - public String getOpenId() - { + public String getOpenId() { return openId; } - - public void setUid(String uid) - { + public void setUid(String uid) { this.uid = uid; } - public String getUid() - { + public String getUid() { return uid; } - - public void setAccessCode(String accessCode) - { + public void setAccessCode(String accessCode) { this.accessCode = accessCode; } - public String getAccessCode() - { + public String getAccessCode() { return accessCode; } - - public void setUnionId(String unionId) - { + public void setUnionId(String unionId) { this.unionId = unionId; } - public String getUnionId() - { + public String getUnionId() { return unionId; } - - public void setScope(String scope) - { + public void setScope(String scope) { this.scope = scope; } - public String getScope() - { + public String getScope() { return scope; } - - public void setTokenType(String tokenType) - { + public void setTokenType(String tokenType) { this.tokenType = tokenType; } - public String getTokenType() - { + public String getTokenType() { return tokenType; } - - public void setIdToken(String idToken) - { + public void setIdToken(String idToken) { this.idToken = idToken; } - public String getIdToken() - { + public String getIdToken() { return idToken; } - - public void setMacAlgorithm(String macAlgorithm) - { + public void setMacAlgorithm(String macAlgorithm) { this.macAlgorithm = macAlgorithm; } - public String getMacAlgorithm() - { + public String getMacAlgorithm() { return macAlgorithm; } - - public void setMacKey(String macKey) - { + public void setMacKey(String macKey) { this.macKey = macKey; } - public String getMacKey() - { + public String getMacKey() { return macKey; } - - public void setCode(String code) - { + public void setCode(String code) { this.code = code; } - public String getCode() - { + public String getCode() { return code; } - - public void setOauthToken(String oauthToken) - { + public void setOauthToken(String oauthToken) { this.oauthToken = oauthToken; } - public String getOauthToken() - { + public String getOauthToken() { return oauthToken; } - - public void setOauthTokenSecret(String oauthTokenSecret) - { + public void setOauthTokenSecret(String oauthTokenSecret) { this.oauthTokenSecret = oauthTokenSecret; } - public String getOauthTokenSecret() - { + public String getOauthTokenSecret() { return oauthTokenSecret; } - - @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("uuid", getUuid()) - .append("userId", getUserId()) - .append("source", getSource()) - .append("accessToken", getAccessToken()) - .append("expireIn", getExpireIn()) - .append("refreshToken", getRefreshToken()) - .append("openId", getOpenId()) - .append("uid", getUid()) - .append("accessCode", getAccessCode()) - .append("unionId", getUnionId()) - .append("scope", getScope()) - .append("tokenType", getTokenType()) - .append("idToken", getIdToken()) - .append("macAlgorithm", getMacAlgorithm()) - .append("macKey", getMacKey()) - .append("code", getCode()) - .append("oauthToken", getOauthToken()) - .append("oauthTokenSecret", getOauthTokenSecret()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("uuid", getUuid()) + .append("userId", getUserId()) + .append("source", getSource()) + .append("accessToken", getAccessToken()) + .append("expireIn", getExpireIn()) + .append("refreshToken", getRefreshToken()) + .append("openId", getOpenId()) + .append("uid", getUid()) + .append("accessCode", getAccessCode()) + .append("unionId", getUnionId()) + .append("scope", getScope()) + .append("tokenType", getTokenType()) + .append("idToken", getIdToken()) + .append("macAlgorithm", getMacAlgorithm()) + .append("macKey", getMacKey()) + .append("code", getCode()) + .append("oauthToken", getOauthToken()) + .append("oauthTokenSecret", getOauthTokenSecret()) + .toString(); } } diff --git a/ruoyi-oauth/ruoyi-oauth-email/pom.xml b/ruoyi-oauth/ruoyi-oauth-email/pom.xml new file mode 100644 index 0000000..f64bfec --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-email/pom.xml @@ -0,0 +1,28 @@ + + + + ruoyi-oauth + com.ruoyi + 3.8.7.3.1 + + 4.0.0 + + ruoyi-oauth-email + + + 邮箱认证模块 + + + + + + + com.ruoyi + ruoyi-oauth-common + + + + + \ No newline at end of file diff --git a/ruoyi-oauth/ruoyi-oauth-justauth/pom.xml b/ruoyi-oauth/ruoyi-oauth-justauth/pom.xml index c215801..1a73cbf 100644 --- a/ruoyi-oauth/ruoyi-oauth-justauth/pom.xml +++ b/ruoyi-oauth/ruoyi-oauth-justauth/pom.xml @@ -12,7 +12,7 @@ ruoyi-oauth-justauth - system系统模块 + justauth框架认证模块 diff --git a/ruoyi-oauth/ruoyi-oauth-justauth/src/main/java/com/ruoyi/oauth/justauth/service/Impl/OAuthServiceImpl.java b/ruoyi-oauth/ruoyi-oauth-justauth/src/main/java/com/ruoyi/oauth/justauth/service/Impl/OAuthServiceImpl.java index a0cd78c..d6799aa 100644 --- a/ruoyi-oauth/ruoyi-oauth-justauth/src/main/java/com/ruoyi/oauth/justauth/service/Impl/OAuthServiceImpl.java +++ b/ruoyi-oauth/ruoyi-oauth-justauth/src/main/java/com/ruoyi/oauth/justauth/service/Impl/OAuthServiceImpl.java @@ -5,6 +5,7 @@ import java.net.Proxy; import java.util.Arrays; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.core.redis.RedisCache; @@ -61,6 +62,7 @@ import me.zhyd.oauth.request.AuthWeiboRequest; import me.zhyd.oauth.request.AuthXmlyRequest; import me.zhyd.oauth.utils.AuthScopeUtils; +@Service public class OAuthServiceImpl implements OAuthService { @Autowired diff --git a/ruoyi-oauth/ruoyi-oauth-phone/pom.xml b/ruoyi-oauth/ruoyi-oauth-phone/pom.xml new file mode 100644 index 0000000..152d7e5 --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-phone/pom.xml @@ -0,0 +1,34 @@ + + + + ruoyi-oauth + com.ruoyi + 3.8.7.3.1 + + 4.0.0 + + ruoyi-oauth-phone + + + 手机号认证模块 + + + + + + + com.ruoyi + ruoyi-oauth-common + + + + com.aliyun + dysmsapi20170525 + 2.0.24 + + + + + \ No newline at end of file diff --git a/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/constant/DySmsConstant.java b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/constant/DySmsConstant.java new file mode 100644 index 0000000..3a9d6d1 --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/constant/DySmsConstant.java @@ -0,0 +1,29 @@ +package com.ruoyi.oauth.phone.constant; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class DySmsConstant { + @Value("${oauth.phone.dysms.appId}") + private String accessKeyId; + @Value("${oauth.phone.dysms.appSecret}") + private String accessKeySecret; + + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public String getAccessKeySecret() { + return accessKeySecret; + } + + public void setAccessKeySecret(String accessKeySecret) { + this.accessKeySecret = accessKeySecret; + } + +} diff --git a/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/controller/DySmsController.java b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/controller/DySmsController.java new file mode 100644 index 0000000..3c0c70d --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/controller/DySmsController.java @@ -0,0 +1,10 @@ +package com.ruoyi.oauth.phone.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/oauth/phone") +public class DySmsController { + +} diff --git a/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/enums/DySmsTemplate.java b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/enums/DySmsTemplate.java new file mode 100644 index 0000000..6168379 --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/enums/DySmsTemplate.java @@ -0,0 +1,67 @@ +package com.ruoyi.oauth.phone.enums; + +import com.ruoyi.common.utils.StringUtils; + +public enum DySmsTemplate { + /** 登录短信模板编码 */ + LOGIN_TEMPLATE_CODE("SMS_175435174", "Ruoyi", "code"), + /** 忘记密码短信模板编码 */ + FORGET_PASSWORD_TEMPLATE_CODE("SMS_175435174", "Ruoyi", "code"), + /** 测试 */ + Test_TEMPLATE_CODE("SMS_154950909", "阿里云短信测试", "code"); + + /** + * 短信模板编码 + */ + private String templateCode; + /** + * 签名 + */ + private String signName; + /** + * 短信模板必需的数据名称,多个key以逗号分隔,此处配置作为校验 + */ + private String keys; + + private DySmsTemplate(String templateCode, String signName, String keys) { + this.templateCode = templateCode; + this.signName = signName; + this.keys = keys; + } + + public String getTemplateCode() { + return templateCode; + } + + public void setTemplateCode(String templateCode) { + this.templateCode = templateCode; + } + + public String getSignName() { + return signName; + } + + public void setSignName(String signName) { + this.signName = signName; + } + + public String getKeys() { + return keys; + } + + public void setKeys(String keys) { + this.keys = keys; + } + + public static DySmsTemplate toEnum(String templateCode) { + if (StringUtils.isEmpty(templateCode)) { + return null; + } + for (DySmsTemplate item : DySmsTemplate.values()) { + if (item.getTemplateCode().equals(templateCode)) { + return item; + } + } + return null; + } +} diff --git a/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/DySmsService.java b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/DySmsService.java new file mode 100644 index 0000000..a3dd993 --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/DySmsService.java @@ -0,0 +1,5 @@ +package com.ruoyi.oauth.phone.service; + +public interface DySmsService { + public String doLogin(String phone); +} diff --git a/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/Impl/DySmsServiceImpl.java b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/Impl/DySmsServiceImpl.java new file mode 100644 index 0000000..f9b48c5 --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/service/Impl/DySmsServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.oauth.phone.service.Impl; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.framework.web.service.UserDetailsServiceImpl; +import com.ruoyi.oauth.phone.service.DySmsService; +import com.ruoyi.oauth.phone.utils.DySmsUtil; +import com.ruoyi.system.service.ISysUserService; + +@Service +public class DySmsServiceImpl implements DySmsService { + + @Autowired + private DySmsUtil dySmsUtil; + @Autowired + private RedisCache redisCache; + @Autowired + private ISysUserService userService; + @Autowired + private UserDetailsServiceImpl userDetailsServiceImpl; + @Autowired + private TokenService tokenService; + + public static String generateRandomString(int n) { + String characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + StringBuilder result = new StringBuilder(); + Random random = new Random(); + + for (int i = 0; i < n; i++) { + int index = random.nextInt(characters.length()); + result.append(characters.charAt(index)); + } + + return result.toString(); + } + + @Override + public String doLogin(String phone) { + String verify = redisCache.getCacheObject("phone_codes_login" + phone); + if(verify != null){ + throw new ServiceException("该手机号验证码未过期"); + } + String code = generateRandomString(6); + SysUser sysUser = userService.selectUserByPhone(phone); + if (sysUser == null) { + throw new ServiceException("该手机号未绑定用户"); + } + try { + dySmsUtil.sendSms(null, null, phone); + redisCache.setCacheObject("phone_codes_login" + phone, code, 1, TimeUnit.MINUTES); + } catch (Exception e) { + e.printStackTrace(); + } + return code; + } + + public String doLoginVerify(String phone, String code) { + String verify = redisCache.getCacheObject("phone_codes_login" + phone); + if (code.equals(verify)) { + SysUser sysUser = userService.selectUserByPhone(phone); + LoginUser loginUser = (LoginUser) userDetailsServiceImpl.createLoginUser(sysUser); + return tokenService.createToken(loginUser); + } else { + throw new ServiceException("验证码错误"); + } + } + + public String doRegister(String phone) { + String code = generateRandomString(6); + redisCache.setCacheObject("phone_codes_register" + phone, code, 1, TimeUnit.MINUTES); + String verify = redisCache.getCacheObject("phone_codes_register" + phone); + if(verify != null){ + throw new ServiceException("该手机号验证码未过期"); + }else{ + try { + dySmsUtil.sendSms(null, null, phone); + redisCache.setCacheObject("phone_codes_register" + phone, code, 1, TimeUnit.MINUTES); + } catch (Exception e) { + e.printStackTrace(); + } + } + return code; + } +} diff --git a/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/utils/DySmsUtil.java b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/utils/DySmsUtil.java new file mode 100644 index 0000000..ef9f5c8 --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-phone/src/main/java/com/ruoyi/oauth/phone/utils/DySmsUtil.java @@ -0,0 +1,96 @@ +package com.ruoyi.oauth.phone.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson2.JSONObject; +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.Common; +import com.aliyun.teautil.models.RuntimeOptions; +import com.ruoyi.oauth.phone.constant.DySmsConstant; +import com.ruoyi.oauth.phone.enums.DySmsTemplate; + +@Component +public class DySmsUtil { + protected final Logger logger = LoggerFactory.getLogger(DySmsUtil.class); + + @Autowired + private DySmsConstant dySmsConfig; + + /** + * 使用AK&SK初始化账号Client + * + * @param accessKeyId + * @param accessKeySecret + * @return Client + * @throws Exception + */ + private Client createClient() throws Exception { + Config config = new Config() + // 必填,您的 AccessKey ID + .setAccessKeyId(dySmsConfig.getAccessKeyId()) + // 必填,您的 AccessKey Secret + .setAccessKeySecret(dySmsConfig.getAccessKeySecret()); + // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi + config.endpoint = "dysmsapi.aliyuncs.com"; + return new Client(config); + } + + /** + * 验证参数 + * + * @param templateParamJson + * @param dySmsTemplate + * @throws Exception + */ + private void validateParam(JSONObject templateParamJson, DySmsTemplate dySmsTemplate) { + String keys = dySmsTemplate.getKeys(); + String[] keyArr = keys.split(","); + for (String item : keyArr) { + if (!templateParamJson.containsKey(item)) { + throw new RuntimeException("模板缺少参数:" + item); + } + } + } + + public void sendSms(DySmsTemplate dySmsTemplate, JSONObject templateParamJson, String phone) + throws Exception { + // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 + // ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey + // 的方式进行调用,仅供参考,建议使用更安全的 STS + // 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html + validateParam(templateParamJson, dySmsTemplate); + Client client = createClient(); + SendSmsRequest sendSmsRequest = new SendSmsRequest() + .setPhoneNumbers(phone) + .setSignName(dySmsTemplate.getSignName()) + .setTemplateCode(dySmsTemplate.getTemplateCode()) + .setTemplateParam(templateParamJson.toJSONString()); + try { + // 复制代码运行请自行打印 API 的返回值 + SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions()); + logger.info("短信接口返回的数据----------------"); + logger.info(sendSmsResponse.toString()); + } catch (TeaException error) { + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } + } +} \ No newline at end of file diff --git a/ruoyi-oauth/ruoyi-oauth-start/pom.xml b/ruoyi-oauth/ruoyi-oauth-start/pom.xml new file mode 100644 index 0000000..ce32097 --- /dev/null +++ b/ruoyi-oauth/ruoyi-oauth-start/pom.xml @@ -0,0 +1,68 @@ + + + + ruoyi-oauth + com.ruoyi + 3.8.7.3.1 + + 4.0.0 + + ruoyi-oauth-start + + + 第三方认证模块 + + + + + + com.ruoyi + ruoyi-common + + + + + com.ruoyi + ruoyi-framework + + + + + com.ruoyi + ruoyi-system + + + + + com.ruoyi + ruoyi-oauth-common + + + + + com.ruoyi + ruoyi-oauth-justauth + + + + + com.ruoyi + ruoyi-oauth-wx + + + + + com.ruoyi + ruoyi-oauth-phone + + + + + com.ruoyi + ruoyi-oauth-email + + + + \ No newline at end of file diff --git a/ruoyi-oauth/ruoyi-oauth-wx/pom.xml b/ruoyi-oauth/ruoyi-oauth-wx/pom.xml index b404da6..4f9bd3a 100644 --- a/ruoyi-oauth/ruoyi-oauth-wx/pom.xml +++ b/ruoyi-oauth/ruoyi-oauth-wx/pom.xml @@ -12,7 +12,7 @@ ruoyi-oauth-wx - system系统模块 + 微信认证模块 diff --git a/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxMiniAppConstant.java b/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxMiniAppConstant.java index 3e0920f..094e830 100644 --- a/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxMiniAppConstant.java +++ b/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxMiniAppConstant.java @@ -5,16 +5,16 @@ import org.springframework.stereotype.Component; @Component public class WxMiniAppConstant { - @Value("${wx.miniapp.appId}") + @Value("${oauth.wx.miniapp.appId}") private String appId; - @Value("${wx.miniapp.appSecret}") + @Value("${oauth.wx.miniapp.appSecret}") private String appSecret; - @Value("${wx.miniapp.url}") + @Value("${oauth.wx.miniapp.url}") private String url; - @Value("${wx.miniapp.open}") + @Value("${oauth.wx.miniapp.open}") private Boolean open; public Boolean getOpen() { diff --git a/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxPubConstant.java b/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxPubConstant.java index fb850bb..faae67e 100644 --- a/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxPubConstant.java +++ b/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/constant/WxPubConstant.java @@ -5,16 +5,16 @@ import org.springframework.stereotype.Component; @Component public class WxPubConstant { - @Value("${wx.pub.appId}") + @Value("${oauth.wx.pub.appId}") private String appId; - @Value("${wx.pub.appSecret}") + @Value("${oauth.wx.pub.appSecret}") private String appSecret; - @Value("${wx.pub.url}") + @Value("${oauth.wx.pub.url}") private String url; - @Value("${wx.pub.open}") + @Value("${oauth.wx.pub.open}") private Boolean open; public String getUrl() { diff --git a/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/controller/WxLoginController.java b/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/controller/WxLoginController.java index 0da58d3..ca1c6b2 100644 --- a/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/controller/WxLoginController.java +++ b/ruoyi-oauth/ruoyi-oauth-wx/src/main/java/com/ruoyi/oauth/wx/controller/WxLoginController.java @@ -18,7 +18,7 @@ import com.ruoyi.oauth.wx.constant.WxPubConstant; import com.ruoyi.oauth.wx.service.Impl.WxLoginServiceImpl; @RestController -@RequestMapping("/wx") +@RequestMapping("/oauth/wx") public class WxLoginController extends BaseController { @Autowired public WxPubConstant wxH5AppConstant; diff --git a/ruoyi-pay/pom.xml b/ruoyi-pay/pom.xml index 108a5f1..6182e47 100644 --- a/ruoyi-pay/pom.xml +++ b/ruoyi-pay/pom.xml @@ -16,7 +16,7 @@ - 第三方认证模块 + 支付模块 @@ -27,18 +27,41 @@ ${ruoyi.version} - + com.ruoyi ruoyi-pay-sqb ${ruoyi.version} + + + + com.ruoyi + ruoyi-pay-alipay + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-pay-wx + ${ruoyi.version} + + + + com.ruoyi + ruoyi-pay-start + ${ruoyi.version} + ruoyi-pay-sqb + ruoyi-pay-alipay + ruoyi-pay-wx + ruoyi-pay-start pom \ No newline at end of file diff --git a/ruoyi-pay/ruoyi-pay-alipay/pom.xml b/ruoyi-pay/ruoyi-pay-alipay/pom.xml new file mode 100644 index 0000000..386ed10 --- /dev/null +++ b/ruoyi-pay/ruoyi-pay-alipay/pom.xml @@ -0,0 +1,28 @@ + + + + ruoyi-pay + com.ruoyi + 3.8.7.3.1 + + 4.0.0 + + ruoyi-pay-alipay + + + 支付宝支付模块 + + + + + + + com.ruoyi + ruoyi-common + + + + + \ No newline at end of file diff --git a/ruoyi-pay/ruoyi-pay-sqb/pom.xml b/ruoyi-pay/ruoyi-pay-sqb/pom.xml index 0d20665..676b0f7 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/pom.xml +++ b/ruoyi-pay/ruoyi-pay-sqb/pom.xml @@ -12,7 +12,7 @@ ruoyi-pay-sqb - system系统模块 + 收钱吧支付模块 diff --git a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/constant/SqbConstant.java b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/constant/SqbConstant.java index e417d4a..f119464 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/constant/SqbConstant.java +++ b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/constant/SqbConstant.java @@ -1,11 +1,13 @@ package com.ruoyi.pay.sqb.constant; + import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; + @Component public class SqbConstant { @Value("${pay.sqb.apiDomain}") private String apiDomain; - + @Value("${pay.sqb.terminalSn}") private String terminalSn; @@ -15,6 +17,12 @@ public class SqbConstant { @Value("${pay.sqb.appId}") private String appId; + @Value("${pay.sqb.vendorSn}") + private String vendorSn; + + @Value("${pay.sqb.vendorKey}") + private String vendorKey; + public String getApiDomain() { return apiDomain; } @@ -62,10 +70,4 @@ public class SqbConstant { public void setVendorKey(String vendorKey) { this.vendorKey = vendorKey; } - - @Value("${pay.sqb.vendorSn}") - private String vendorSn; - - @Value("${pay.sqb.vendorKey}") - private String vendorKey; } diff --git a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java index e75217e..bbf7c46 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java +++ b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java @@ -15,7 +15,7 @@ import com.ruoyi.pay.sqb.utils.HttpUtil; @Service public class SQBServiceImpl { @Autowired - SqbConstant sqbConstant; + private SqbConstant sqbConstant; /** * 计算字符串的MD5值 diff --git a/ruoyi-pay/ruoyi-pay-start/pom.xml b/ruoyi-pay/ruoyi-pay-start/pom.xml new file mode 100644 index 0000000..3675e56 --- /dev/null +++ b/ruoyi-pay/ruoyi-pay-start/pom.xml @@ -0,0 +1,46 @@ + + + + ruoyi-pay + com.ruoyi + 3.8.7.3.1 + + 4.0.0 + + ruoyi-pay-start + + + 第三方支付模块 + + + + + + + com.ruoyi + ruoyi-common + + + + + com.ruoyi + ruoyi-pay-sqb + + + + + com.ruoyi + ruoyi-pay-alipay + + + + + com.ruoyi + ruoyi-pay-wx + + + + + \ No newline at end of file diff --git a/ruoyi-pay/ruoyi-pay-wx/pom.xml b/ruoyi-pay/ruoyi-pay-wx/pom.xml new file mode 100644 index 0000000..1f3f5e2 --- /dev/null +++ b/ruoyi-pay/ruoyi-pay-wx/pom.xml @@ -0,0 +1,28 @@ + + + + ruoyi-pay + com.ruoyi + 3.8.7.3.1 + + 4.0.0 + + ruoyi-pay-wx + + + 微信支付模块 + + + + + + + com.ruoyi + ruoyi-common + + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 76e1c79..e8b1a90 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -1,7 +1,9 @@ package com.ruoyi.system.mapper; import java.util.List; + import org.apache.ibatis.annotations.Param; + import com.ruoyi.common.core.domain.entity.SysUser; /** @@ -51,6 +53,14 @@ public interface SysUserMapper */ public SysUser selectUserById(Long userId); + /** + * 通过手机号查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + public SysUser selectUserByPhone(String phone); + /** * 新增用户信息 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index 10bc2ab..9f9424f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service; import java.util.List; + import com.ruoyi.common.core.domain.entity.SysUser; /** @@ -8,8 +9,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; * * @author ruoyi */ -public interface ISysUserService -{ +public interface ISysUserService { /** * 根据条件分页查询用户列表 * @@ -50,6 +50,14 @@ public interface ISysUserService */ public SysUser selectUserById(Long userId); + /** + * 通过手机号查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + public SysUser selectUserByPhone(String phone); + /** * 根据用户ID查询用户所属角色组 * @@ -131,7 +139,7 @@ public interface ISysUserService /** * 用户授权角色 * - * @param userId 用户ID + * @param userId 用户ID * @param roleIds 角色组 */ public void insertUserAuth(Long userId, Long[] roleIds); @@ -156,7 +164,7 @@ public interface ISysUserService * 修改用户头像 * * @param userName 用户名 - * @param avatar 头像地址 + * @param avatar 头像地址 * @return 结果 */ public boolean updateUserAvatar(String userName, String avatar); @@ -197,9 +205,9 @@ public interface ISysUserService /** * 导入用户数据 * - * @param userList 用户数据列表 + * @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 - * @param operName 操作用户 + * @param operName 操作用户 * @return 结果 */ public String importUser(List userList, Boolean isUpdateSupport, String operName); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 1d22c23..298290c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -3,13 +3,14 @@ package com.ruoyi.system.service.impl; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import jakarta.validation.Validator; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; + import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysRole; @@ -30,14 +31,15 @@ import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; +import jakarta.validation.Validator; + /** * 用户 业务层处理 * * @author ruoyi */ @Service -public class SysUserServiceImpl implements ISysUserService -{ +public class SysUserServiceImpl implements ISysUserService { private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); @Autowired @@ -69,8 +71,7 @@ public class SysUserServiceImpl implements ISysUserService */ @Override @DataScope(deptAlias = "d", userAlias = "u") - public List selectUserList(SysUser user) - { + public List selectUserList(SysUser user) { return userMapper.selectUserList(user); } @@ -82,8 +83,7 @@ public class SysUserServiceImpl implements ISysUserService */ @Override @DataScope(deptAlias = "d", userAlias = "u") - public List selectAllocatedList(SysUser user) - { + public List selectAllocatedList(SysUser user) { return userMapper.selectAllocatedList(user); } @@ -95,8 +95,7 @@ public class SysUserServiceImpl implements ISysUserService */ @Override @DataScope(deptAlias = "d", userAlias = "u") - public List selectUnallocatedList(SysUser user) - { + public List selectUnallocatedList(SysUser user) { return userMapper.selectUnallocatedList(user); } @@ -107,8 +106,7 @@ public class SysUserServiceImpl implements ISysUserService * @return 用户对象信息 */ @Override - public SysUser selectUserByUserName(String userName) - { + public SysUser selectUserByUserName(String userName) { return userMapper.selectUserByUserName(userName); } @@ -119,11 +117,21 @@ public class SysUserServiceImpl implements ISysUserService * @return 用户对象信息 */ @Override - public SysUser selectUserById(Long userId) - { + public SysUser selectUserById(Long userId) { return userMapper.selectUserById(userId); } + /** + * 通过手机号查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + @Override + public SysUser selectUserByPhone(String phone) { + return userMapper.selectUserByPhone(phone); + } + /** * 查询用户所属角色组 * @@ -131,11 +139,9 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public String selectUserRoleGroup(String userName) - { + public String selectUserRoleGroup(String userName) { List list = roleMapper.selectRolesByUserName(userName); - if (CollectionUtils.isEmpty(list)) - { + if (CollectionUtils.isEmpty(list)) { return StringUtils.EMPTY; } return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); @@ -148,11 +154,9 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public String selectUserPostGroup(String userName) - { + public String selectUserPostGroup(String userName) { List list = postMapper.selectPostsByUserName(userName); - if (CollectionUtils.isEmpty(list)) - { + if (CollectionUtils.isEmpty(list)) { return StringUtils.EMPTY; } return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); @@ -165,12 +169,10 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public boolean checkUserNameUnique(SysUser user) - { + public boolean checkUserNameUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkUserNameUnique(user.getUserName()); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -183,12 +185,10 @@ public class SysUserServiceImpl implements ISysUserService * @return */ @Override - public boolean checkPhoneUnique(SysUser user) - { + public boolean checkPhoneUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -201,12 +201,10 @@ public class SysUserServiceImpl implements ISysUserService * @return */ @Override - public boolean checkEmailUnique(SysUser user) - { + public boolean checkEmailUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); SysUser info = userMapper.checkEmailUnique(user.getEmail()); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -218,10 +216,8 @@ public class SysUserServiceImpl implements ISysUserService * @param user 用户信息 */ @Override - public void checkUserAllowed(SysUser user) - { - if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) - { + public void checkUserAllowed(SysUser user) { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { throw new ServiceException("不允许操作超级管理员用户"); } } @@ -232,15 +228,12 @@ public class SysUserServiceImpl implements ISysUserService * @param userId 用户id */ @Override - public void checkUserDataScope(Long userId) - { - if (!SysUser.isAdmin(SecurityUtils.getUserId())) - { + public void checkUserDataScope(Long userId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { SysUser user = new SysUser(); user.setUserId(userId); List users = SpringUtils.getAopProxy(this).selectUserList(user); - if (StringUtils.isEmpty(users)) - { + if (StringUtils.isEmpty(users)) { throw new ServiceException("没有权限访问用户数据!"); } } @@ -254,8 +247,7 @@ public class SysUserServiceImpl implements ISysUserService */ @Override @Transactional - public int insertUser(SysUser user) - { + public int insertUser(SysUser user) { // 新增用户信息 int rows = userMapper.insertUser(user); // 新增用户岗位关联 @@ -272,8 +264,7 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public boolean registerUser(SysUser user) - { + public boolean registerUser(SysUser user) { return userMapper.insertUser(user) > 0; } @@ -285,8 +276,7 @@ public class SysUserServiceImpl implements ISysUserService */ @Override @Transactional - public int updateUser(SysUser user) - { + public int updateUser(SysUser user) { Long userId = user.getUserId(); // 删除用户与角色关联 userRoleMapper.deleteUserRoleByUserId(userId); @@ -302,13 +292,12 @@ public class SysUserServiceImpl implements ISysUserService /** * 用户授权角色 * - * @param userId 用户ID + * @param userId 用户ID * @param roleIds 角色组 */ @Override @Transactional - public void insertUserAuth(Long userId, Long[] roleIds) - { + public void insertUserAuth(Long userId, Long[] roleIds) { userRoleMapper.deleteUserRoleByUserId(userId); insertUserRole(userId, roleIds); } @@ -320,8 +309,7 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public int updateUserStatus(SysUser user) - { + public int updateUserStatus(SysUser user) { return userMapper.updateUser(user); } @@ -332,8 +320,7 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public int updateUserProfile(SysUser user) - { + public int updateUserProfile(SysUser user) { return userMapper.updateUser(user); } @@ -341,12 +328,11 @@ public class SysUserServiceImpl implements ISysUserService * 修改用户头像 * * @param userName 用户名 - * @param avatar 头像地址 + * @param avatar 头像地址 * @return 结果 */ @Override - public boolean updateUserAvatar(String userName, String avatar) - { + public boolean updateUserAvatar(String userName, String avatar) { return userMapper.updateUserAvatar(userName, avatar) > 0; } @@ -357,8 +343,7 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public int resetPwd(SysUser user) - { + public int resetPwd(SysUser user) { return userMapper.updateUser(user); } @@ -370,8 +355,7 @@ public class SysUserServiceImpl implements ISysUserService * @return 结果 */ @Override - public int resetUserPwd(String userName, String password) - { + public int resetUserPwd(String userName, String password) { return userMapper.resetUserPwd(userName, password); } @@ -380,8 +364,7 @@ public class SysUserServiceImpl implements ISysUserService * * @param user 用户对象 */ - public void insertUserRole(SysUser user) - { + public void insertUserRole(SysUser user) { this.insertUserRole(user.getUserId(), user.getRoleIds()); } @@ -390,15 +373,12 @@ public class SysUserServiceImpl implements ISysUserService * * @param user 用户对象 */ - public void insertUserPost(SysUser user) - { + public void insertUserPost(SysUser user) { Long[] posts = user.getPostIds(); - if (StringUtils.isNotEmpty(posts)) - { + if (StringUtils.isNotEmpty(posts)) { // 新增用户与岗位管理 List list = new ArrayList(posts.length); - for (Long postId : posts) - { + for (Long postId : posts) { SysUserPost up = new SysUserPost(); up.setUserId(user.getUserId()); up.setPostId(postId); @@ -411,17 +391,14 @@ public class SysUserServiceImpl implements ISysUserService /** * 新增用户角色信息 * - * @param userId 用户ID + * @param userId 用户ID * @param roleIds 角色组 */ - public void insertUserRole(Long userId, Long[] roleIds) - { - if (StringUtils.isNotEmpty(roleIds)) - { + public void insertUserRole(Long userId, Long[] roleIds) { + if (StringUtils.isNotEmpty(roleIds)) { // 新增用户与角色管理 List list = new ArrayList(roleIds.length); - for (Long roleId : roleIds) - { + for (Long roleId : roleIds) { SysUserRole ur = new SysUserRole(); ur.setUserId(userId); ur.setRoleId(roleId); @@ -439,8 +416,7 @@ public class SysUserServiceImpl implements ISysUserService */ @Override @Transactional - public int deleteUserById(Long userId) - { + public int deleteUserById(Long userId) { // 删除用户与角色关联 userRoleMapper.deleteUserRoleByUserId(userId); // 删除用户与岗位表 @@ -456,10 +432,8 @@ public class SysUserServiceImpl implements ISysUserService */ @Override @Transactional - public int deleteUserByIds(Long[] userIds) - { - for (Long userId : userIds) - { + public int deleteUserByIds(Long[] userIds) { + for (Long userId : userIds) { checkUserAllowed(new SysUser(userId)); checkUserDataScope(userId); } @@ -473,16 +447,14 @@ public class SysUserServiceImpl implements ISysUserService /** * 导入用户数据 * - * @param userList 用户数据列表 + * @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 - * @param operName 操作用户 + * @param operName 操作用户 * @return 结果 */ @Override - public String importUser(List userList, Boolean isUpdateSupport, String operName) - { - if (StringUtils.isNull(userList) || userList.size() == 0) - { + public String importUser(List userList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(userList) || userList.size() == 0) { throw new ServiceException("导入用户数据不能为空!"); } int successNum = 0; @@ -490,23 +462,18 @@ public class SysUserServiceImpl implements ISysUserService StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); String password = configService.selectConfigByKey("sys.user.initPassword"); - for (SysUser user : userList) - { - try - { + for (SysUser user : userList) { + try { // 验证是否存在这个用户 SysUser u = userMapper.selectUserByUserName(user.getUserName()); - if (StringUtils.isNull(u)) - { + if (StringUtils.isNull(u)) { BeanValidators.validateWithException(validator, user); user.setPassword(SecurityUtils.encryptPassword(password)); user.setCreateBy(operName); userMapper.insertUser(user); successNum++; successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 导入成功"); - } - else if (isUpdateSupport) - { + } else if (isUpdateSupport) { BeanValidators.validateWithException(validator, user); checkUserAllowed(u); checkUserDataScope(u.getUserId()); @@ -515,28 +482,21 @@ public class SysUserServiceImpl implements ISysUserService userMapper.updateUser(user); successNum++; successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 更新成功"); - } - else - { + } else { failureNum++; failureMsg.append("
" + failureNum + "、账号 " + user.getUserName() + " 已存在"); } - } - catch (Exception e) - { + } catch (Exception e) { failureNum++; String msg = "
" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; failureMsg.append(msg + e.getMessage()); log.error(msg, e); } } - if (failureNum > 0) - { + if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new ServiceException(failureMsg.toString()); - } - else - { + } else { successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); } return successMsg.toString(); diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index d86c444..dd4d0b9 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -129,6 +129,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where u.user_id = #{userId} + +