Commit f38c7831523a5b6314e8039afe1c1407982ed7c6

Authored by YunaiV
2 parents 076c7a4e 1a30deb2

Merge remote-tracking branch 'origin/master'

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
  1 +/**
  2 + * yudao-module-member 模块的适配,解除 yudao-module-system 对它们的依赖
  3 + */
  4 +package cn.iocoder.yudao.module.system.service.member;
... ...
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)) {
... ...