Commit f38c7831523a5b6314e8039afe1c1407982ed7c6
Merge remote-tracking branch 'origin/master'
Showing
7 changed files
with
74 additions
and
23 deletions
README.md
| ... | ... | @@ -7,19 +7,21 @@ |
| 7 | 7 | |
| 8 | 8 | ## 🐯 平台简介 |
| 9 | 9 | |
| 10 | -**芋道**,一套**全部开源**的**企业级**的快速开发平台,毫无保留给个人及企业免费使用。 | |
| 10 | +**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 | |
| 11 | 11 | |
| 12 | 12 | > 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。 |
| 13 | +> | |
| 14 | +> 😜 给项目点点 Star 吧,这对我们真的很重要! | |
| 13 | 15 | |
| 14 | 16 | * 前端采用 [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) ,正在支持 Vue 3 + ElementUI Plus 最新方案。 |
| 15 | 17 | * 后端采用 Spring Boot、MySQL + MyBatis Plus、Redis + Redisson。 |
| 16 | 18 | * 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统。 |
| 17 | 19 | * 支持加载动态权限菜单,按钮级别权限控制,本地缓存提升性能。 |
| 18 | 20 | * 支持 SaaS 多租户系统,可自定义每个租户的权限,提供透明化的多租户底层封装。 |
| 19 | -* 工作流使用 Activiti ,支持动态表单、在线设计流程、多种任务分配方式。 | |
| 21 | +* 工作流使用 Activiti + Flowable,支持动态表单、在线设计流程、多种任务分配方式。 | |
| 20 | 22 | * 高效率开发,使用代码生成器可以一键生成前后端代码 + 单元测试 + Swagger 接口文档 + Validator 参数校验。 |
| 21 | 23 | * 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款。 |
| 22 | -* 集成阿里云、腾讯云、云片等短信渠道,集成阿里云、腾讯云、七牛云等云存储服务。 | |
| 24 | +* 集成阿里云、腾讯云、云片等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务。 | |
| 23 | 25 | |
| 24 | 26 | | 项目名 | 说明 | 传说门 | |
| 25 | 27 | |--------------------|------------------------|-------------------------------------------------------------------------------------------------------------------------------------| | ... | ... |
yudao-module-infra/yudao-module-infra-impl/pom.xml
| ... | ... | @@ -21,11 +21,6 @@ |
| 21 | 21 | <dependencies> |
| 22 | 22 | <dependency> |
| 23 | 23 | <groupId>cn.iocoder.boot</groupId> |
| 24 | - <artifactId>yudao-module-member-api</artifactId> | |
| 25 | - <version>${revision}</version> | |
| 26 | - </dependency> | |
| 27 | - <dependency> | |
| 28 | - <groupId>cn.iocoder.boot</groupId> | |
| 29 | 24 | <artifactId>yudao-module-system-api</artifactId> |
| 30 | 25 | <version>${revision}</version> |
| 31 | 26 | </dependency> | ... | ... |
yudao-module-system/yudao-module-system-impl/pom.xml
| ... | ... | @@ -25,11 +25,6 @@ |
| 25 | 25 | </dependency> |
| 26 | 26 | <dependency> |
| 27 | 27 | <groupId>cn.iocoder.boot</groupId> |
| 28 | - <artifactId>yudao-module-member-api</artifactId> | |
| 29 | - <version>${revision}</version> | |
| 30 | - </dependency> | |
| 31 | - <dependency> | |
| 32 | - <groupId>cn.iocoder.boot</groupId> | |
| 33 | 28 | <artifactId>yudao-module-infra-api</artifactId> |
| 34 | 29 | <version>${revision}</version> |
| 35 | 30 | </dependency> | ... | ... |
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/member/MemberService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.system.service.member; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * Member Service 接口 | |
| 5 | + * | |
| 6 | + * @author 芋道源码 | |
| 7 | + */ | |
| 8 | +public interface MemberService { | |
| 9 | + | |
| 10 | + /** | |
| 11 | + * 获得会员用户的手机号码 | |
| 12 | + * | |
| 13 | + * @param id 会员用户编号 | |
| 14 | + * @return 手机号码 | |
| 15 | + */ | |
| 16 | + String getMemberUserMobile(Long id); | |
| 17 | + | |
| 18 | +} | ... | ... |
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/member/MemberServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.system.service.member; | |
| 2 | + | |
| 3 | +import cn.hutool.core.util.ClassUtil; | |
| 4 | +import cn.hutool.core.util.ReflectUtil; | |
| 5 | +import cn.hutool.extra.spring.SpringUtil; | |
| 6 | +import org.springframework.beans.factory.annotation.Value; | |
| 7 | +import org.springframework.stereotype.Service; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * Member Service 实现类 | |
| 11 | + * | |
| 12 | + * @author 芋道源码 | |
| 13 | + */ | |
| 14 | +@Service | |
| 15 | +public class MemberServiceImpl implements MemberService { | |
| 16 | + | |
| 17 | + @Value("${yudao.info.base-package}") | |
| 18 | + private String basePackage; | |
| 19 | + | |
| 20 | + private volatile Object memberUserApi; | |
| 21 | + | |
| 22 | + @Override | |
| 23 | + public String getMemberUserMobile(Long id) { | |
| 24 | + if (id == null) { | |
| 25 | + return null; | |
| 26 | + } | |
| 27 | + Object user = ReflectUtil.invoke(getMemberUserApi(), "getUser", id); | |
| 28 | + if (user == null) { | |
| 29 | + return null; | |
| 30 | + } | |
| 31 | + return ReflectUtil.invoke(user, "getMobile"); | |
| 32 | + } | |
| 33 | + | |
| 34 | + private Object getMemberUserApi() { | |
| 35 | + if (memberUserApi == null) { | |
| 36 | + memberUserApi = SpringUtil.getBean(ClassUtil.loadClass(String.format("%s.module.member.api.user.MemberUserApi", basePackage))); | |
| 37 | + } | |
| 38 | + return memberUserApi; | |
| 39 | + } | |
| 40 | + | |
| 41 | +} | ... | ... |
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/member/package-info.java
0 → 100644
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.system.service.sms; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.lang.Assert; | |
| 4 | 5 | import cn.hutool.core.util.StrUtil; |
| 5 | 6 | import cn.iocoder.yudao.framework.common.core.KeyValue; |
| 6 | 7 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| ... | ... | @@ -10,16 +11,14 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory; |
| 10 | 11 | import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; |
| 11 | 12 | import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO; |
| 12 | 13 | import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO; |
| 13 | -import cn.iocoder.yudao.module.member.api.user.MemberUserApi; | |
| 14 | -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO; | |
| 15 | 14 | import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; |
| 16 | 15 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| 17 | 16 | import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; |
| 18 | 17 | import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; |
| 18 | +import cn.iocoder.yudao.module.system.service.member.MemberService; | |
| 19 | 19 | import cn.iocoder.yudao.module.system.service.user.AdminUserService; |
| 20 | 20 | import com.google.common.annotations.VisibleForTesting; |
| 21 | 21 | import org.springframework.stereotype.Service; |
| 22 | -import org.springframework.util.Assert; | |
| 23 | 22 | |
| 24 | 23 | import javax.annotation.Resource; |
| 25 | 24 | import java.util.List; |
| ... | ... | @@ -40,7 +39,7 @@ public class SmsSendServiceImpl implements SmsSendService { |
| 40 | 39 | @Resource |
| 41 | 40 | private AdminUserService adminUserService; |
| 42 | 41 | @Resource |
| 43 | - private MemberUserApi memberUserApi; | |
| 42 | + private MemberService memberService; | |
| 44 | 43 | |
| 45 | 44 | @Resource |
| 46 | 45 | private SmsTemplateService smsTemplateService; |
| ... | ... | @@ -70,10 +69,7 @@ public class SmsSendServiceImpl implements SmsSendService { |
| 70 | 69 | public Long sendSingleSmsToMember(String mobile, Long userId, String templateCode, Map<String, Object> templateParams) { |
| 71 | 70 | // 如果 mobile 为空,则加载用户编号对应的手机号 |
| 72 | 71 | if (StrUtil.isEmpty(mobile)) { |
| 73 | - UserRespDTO user = memberUserApi.getUser(userId); | |
| 74 | - if (user != null) { | |
| 75 | - mobile = user.getMobile(); | |
| 76 | - } | |
| 72 | + mobile = memberService.getMemberUserMobile(userId); | |
| 77 | 73 | } |
| 78 | 74 | // 执行发送 |
| 79 | 75 | return this.sendSingleSms(mobile, userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams); |
| ... | ... | @@ -146,7 +142,7 @@ public class SmsSendServiceImpl implements SmsSendService { |
| 146 | 142 | public void doSendSms(SmsSendMessage message) { |
| 147 | 143 | // 获得渠道对应的 SmsClient 客户端 |
| 148 | 144 | SmsClient smsClient = smsClientFactory.getSmsClient(message.getChannelId()); |
| 149 | - Assert.notNull(smsClient, String.format("短信客户端(%d) 不存在", message.getChannelId())); | |
| 145 | + Assert.notNull(smsClient, "短信客户端({}) 不存在", message.getChannelId()); | |
| 150 | 146 | // 发送短信 |
| 151 | 147 | SmsCommonResult<SmsSendRespDTO> sendResult = smsClient.sendSms(message.getLogId(), message.getMobile(), |
| 152 | 148 | message.getApiTemplateId(), message.getTemplateParams()); |
| ... | ... | @@ -159,7 +155,7 @@ public class SmsSendServiceImpl implements SmsSendService { |
| 159 | 155 | public void receiveSmsStatus(String channelCode, String text) throws Throwable { |
| 160 | 156 | // 获得渠道对应的 SmsClient 客户端 |
| 161 | 157 | SmsClient smsClient = smsClientFactory.getSmsClient(channelCode); |
| 162 | - Assert.notNull(smsClient, String.format("短信客户端(%s) 不存在", channelCode)); | |
| 158 | + Assert.notNull(smsClient, "短信客户端({}) 不存在", channelCode); | |
| 163 | 159 | // 解析内容 |
| 164 | 160 | List<SmsReceiveRespDTO> receiveResults = smsClient.parseSmsReceiveStatus(text); |
| 165 | 161 | if (CollUtil.isEmpty(receiveResults)) { | ... | ... |