finalList = list;
+ threadPoolTaskExecutor.execute(() -> {
+ for (AdminOauthUserOtherInfoDO otherInfoDO : finalList) {
+ if (otherInfoDO.getOpenId() != null && !otherInfoDO.getOpenId().isEmpty()) {
//获取openId有值的用户
- subscribeMessageSendApi.sendCompanyNotice(NoticeConvert.INSTANCE.convertCompanyNotice(
- adminUserDO.getOpenId(), notice, dictDataDO.getLabel(), currentUser.getNickname(),
- "formal"));
- });
+ SubscribeMessageReqDTO dto = WxMiNiMsgTemplate.INSTANCE.convertCompanyAnnouncementNotice(new CompanyAnnouncementNoticeDTO()
+ .setOpenId(otherInfoDO.getOpenId())
+ .setNoticeType(dictDataDO.getLabel())
+ .setTitle(notice.getTitle())
+ .setNickname(currentUser.getNickname())
+ .setSendingTime(DateUtils.dateFormat(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND))
+ .setMiniProgramState("formal")
+ .setPage("/subPages/notice/detail?id=" + notice.getId())
+ );
+ subscribeMessageSendApi.sendMsg(dto);
+ }
}
- }
+ });
}
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java
index e54aa14d..d5b8c68e 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO;
-import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import com.xingyuv.jushauth.model.AuthUser;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.mp.api.WxMpService;
@@ -16,16 +16,14 @@ import javax.validation.Valid;
/**
* 社交应用 Service 接口
- *
-
*/
public interface SocialClientService {
/**
* 获得社交平台的授权 URL
*
- * @param socialType 社交平台的类型 {@link SocialTypeEnum}
- * @param userType 用户类型
+ * @param socialType 社交平台的类型 {@link SocialTypeEnum}
+ * @param userType 用户类型
* @param redirectUri 重定向 URL
* @return 社交平台的授权 URL
*/
@@ -35,9 +33,9 @@ public interface SocialClientService {
* 请求社交平台,获得授权的用户
*
* @param socialType 社交平台的类型
- * @param userType 用户类型
- * @param code 授权码
- * @param state 授权 state
+ * @param userType 用户类型
+ * @param code 授权码
+ * @param state 授权 state
* @return 授权的用户
*/
AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state);
@@ -48,40 +46,44 @@ public interface SocialClientService {
* 创建微信公众号的 JS SDK 初始化所需的签名
*
* @param userType 用户类型
- * @param url 访问的 URL 地址
+ * @param url 访问的 URL 地址
* @return 签名
*/
WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url);
/**
* 获取WxMpService
+ *
* @return
*/
- WxMpService getWxMpService() ;
+ WxMpService getWxMpService();
// =================== 微信小程序独有 ===================
/**
* 获得微信小程序的手机信息
*
- * @param userType 用户类型
+ * @param userType 用户类型
* @param phoneCode 手机授权码
* @return 手机信息
*/
- WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode);
+ WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer socialType, Integer userType, String phoneCode);
/**
* 获取微信小程序的用户唯一标识 openId
+ *
+ * @param type
* @param jsCode 登录时获取的 code,可通过wx.login获取
* @return
*/
- WxMaJscode2SessionResult getWxMaJscode2SessionResult(String jsCode) ;
+ WxMaJscode2SessionResult getWxMaJscode2SessionResult(Integer type, String jsCode);
/**
* 获取WxMaService
+ *
* @return
*/
- WxMaService getWxMaService() ;
+ WxMaService getWxMaService();
// =================== 客户端管理 ===================
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java
index e44e0aba..5e4e6027 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java
@@ -18,7 +18,7 @@ import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialCl
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialClientMapper;
-import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
import com.google.common.annotations.VisibleForTesting;
@@ -52,8 +52,6 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
/**
* 社交应用 Service 实现类
- *
-
*/
@Service
@Slf4j
@@ -71,14 +69,15 @@ public class SocialClientServiceImpl implements SocialClientService {
@Override
public WxMpService getWxMpService() {
- return getWxMpService(2) ;
+ return getWxMpService(2);
}
+
/**
* 缓存 WxMpService 对象
- *
+ *
* key:使用微信公众号的 appId + secret 拼接,即 {@link SocialClientDO} 的 clientId 和 clientSecret 属性。
* 为什么 key 使用这种格式?因为 {@link SocialClientDO} 在管理后台可以变更,通过这个 key 存储它的单例。
- *
+ *
* 为什么要做 WxMpService 缓存?因为 WxMpService 构建成本比较大,所以尽量保证它是单例。
*/
private final LoadingCache wxMpServiceCache = CacheUtils.buildAsyncReloadingCache(
@@ -100,11 +99,12 @@ public class SocialClientServiceImpl implements SocialClientService {
@Override
public WxMaService getWxMaService() {
- return getWxMaService(2) ;
+ return getWxMaService(2);
}
+
/**
* 缓存 WxMaService 对象
- *
+ *
* 说明同 {@link #wxMpServiceCache} 变量
*/
private final LoadingCache wxMaServiceCache = CacheUtils.buildAsyncReloadingCache(
@@ -150,7 +150,7 @@ public class SocialClientServiceImpl implements SocialClientService {
* 构建 AuthRequest 对象,支持多租户配置
*
* @param socialType 社交类型
- * @param userType 用户类型
+ * @param userType 用户类型
* @return AuthRequest 对象
*/
@VisibleForTesting
@@ -207,7 +207,7 @@ public class SocialClientServiceImpl implements SocialClientService {
/**
* 创建 clientId + clientSecret 对应的 WxMpService 对象
*
- * @param clientId 微信公众号 appId
+ * @param clientId 微信公众号 appId
* @param clientSecret 微信公众号 secret
* @return WxMpService 对象
*/
@@ -228,8 +228,8 @@ public class SocialClientServiceImpl implements SocialClientService {
// =================== 微信小程序独有 ===================
@Override
- public WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode) {
- WxMaService service = getWxMaService(userType);
+ public WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer socialType, Integer userType, String phoneCode) {
+ WxMaService service = getWxMaService(socialType, userType);
try {
return service.getUserService().getPhoneNoInfo(phoneCode);
} catch (WxErrorException e) {
@@ -256,10 +256,28 @@ public class SocialClientServiceImpl implements SocialClientService {
return wxMaService;
}
+ /**
+ * 获得 clientId + clientSecret 对应的 WxMpService 对象
+ *
+ * @param userType 用户类型
+ * @return WxMpService 对象
+ */
+ @VisibleForTesting
+ WxMaService getWxMaService(Integer socialType, Integer userType) {
+ // 第一步,查询 DB 的配置项,获得对应的 WxMaService 对象
+ SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(
+ socialType, userType);
+ if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
+ return wxMaServiceCache.getUnchecked(client.getClientId() + ":" + client.getClientSecret());
+ }
+ // 第二步,不存在 DB 配置项,则使用 application-*.yaml 对应的 WxMaService 对象
+ return wxMaService;
+ }
+
/**
* 创建 clientId + clientSecret 对应的 WxMaService 对象
*
- * @param clientId 微信小程序 appId
+ * @param clientId 微信小程序 appId
* @param clientSecret 微信小程序 secret
* @return WxMaService 对象
*/
@@ -318,11 +336,11 @@ public class SocialClientServiceImpl implements SocialClientService {
/**
* 校验社交应用是否重复,需要保证 userType + socialType 唯一
- *
+ *
* 原因是,不同端(userType)选择某个社交登录(socialType)时,需要通过 {@link #buildAuthRequest(Integer, Integer)} 构建对应的请求
*
- * @param id 编号
- * @param userType 用户类型
+ * @param id 编号
+ * @param userType 用户类型
* @param socialType 社交类型
*/
private void validateSocialClientUnique(Long id, Integer userType, Integer socialType) {
@@ -349,9 +367,8 @@ public class SocialClientServiceImpl implements SocialClientService {
@SneakyThrows
@Override
- public WxMaJscode2SessionResult getWxMaJscode2SessionResult(String jsCode) {
- WxMaService wxMaService = getWxMaService(2) ;
- WxMaJscode2SessionResult result = wxMaService.jsCode2SessionInfo(jsCode) ;
- return result ;
+ public WxMaJscode2SessionResult getWxMaJscode2SessionResult(Integer type, String jsCode) {
+ WxMaService wxMaService = getWxMaService(type, 2);
+ return wxMaService.jsCode2SessionInfo(jsCode);
}
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
index 379f7ef3..25aa27ae 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
-import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import javax.validation.Valid;
import java.util.List;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
index b6b64665..d414eafe 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
@@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper;
-import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import com.xingyuv.jushauth.model.AuthUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -32,7 +32,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USE
/**
* 社交用户 Service 实现类
*
-
+
*/
@Service
@Validated
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
index bd388b56..509198d1 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserApiDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserPageApiDTO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.controller.admin.user.dto.UserDTO;
import cn.iocoder.yudao.module.system.controller.admin.user.dto.UserPageDTO;
@@ -147,13 +146,6 @@ public interface AdminUserService {
*/
AdminUserDO getUserByMobile(String mobile);
- /**
- * 根据opneId获取用户
- *
- * @param openId 微信小程序用户唯一id
- * @return 用户对象信息
- */
- AdminUserDO getUserByOpenId(String openId);
/**
* 获得用户分页列表
@@ -428,4 +420,14 @@ public interface AdminUserService {
List getUserListBySubordinateIds(Long adminId);
List getUserListBySubordinate(Long id);
+
+ /**
+ * 更新用户unionId
+ *
+ * @param id
+ * @param unionId
+ */
+ void updateUnionId(Long id, String unionId);
+
+ AdminUserDO getUserByUnionId(String unionId);
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
index 092d9a9f..17991b8e 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
@@ -101,14 +101,6 @@ public class AdminUserServiceImpl implements AdminUserService {
userMapper.updateById(new AdminUserDO().setId(id).setOpenId(openId));
}
- @Override
- public AdminUserDO getUserByOpenId(String openId) {
- if (openId == null) {
- return null;
- }
- return userMapper.sgetByOpenId(openId);
- }
-
@Override
@Transactional(rollbackFor = Exception.class)
public Long createUser(UserSaveReqVO createReqVO) {
@@ -859,4 +851,15 @@ public class AdminUserServiceImpl implements AdminUserService {
users.removeIf(item -> ObjUtil.equal(item.getId(), id)); // 排除自己
return BeanUtils.toBean(users, AdminUserRespDTO.class);
}
+
+ @Override
+ public void updateUnionId(Long id, String unionId) {
+ userMapper.updateById(new AdminUserDO().setId(id).setUnionId(unionId));
+ }
+
+ @Override
+ public AdminUserDO getUserByUnionId(String unionId) {
+ return userMapper.selectOne(new LambdaQueryWrapper()
+ .eq(AdminUserDO::getUnionId, unionId));
+ }
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml
index b7c7ada7..1d54b894 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml
@@ -129,6 +129,8 @@ wx:
# secret: 5abee519483bc9f8cb37ce280e814bd0
app-id: wx9943f95048ba8472
secret: f1f5625f210142b6ae31a06c699826df
+ token: aikaidevtest
+ aesKey: RmC9DkIpsq6pK2PGxyI4HQaDHrv5W7de8PXeAO3lqM9
# 存储配置,解决 AccessToken 的跨节点的共享
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
index fde9d2f8..d7299d01 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
@@ -125,6 +125,8 @@ wx:
# secret: 5abee519483bc9f8cb37ce280e814bd0
app-id: wx5b23ba7a5589ecbb # 测试号
secret: 2a7b3b20c537e52e74afd395eb85f61f
+ token: aikaidevtest
+ aesKey: RmC9DkIpsq6pK2PGxyI4HQaDHrv5W7de8PXeAO3lqM9
# 存储配置,解决 AccessToken 的跨节点的共享
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/auth/AdminOauthUserOtherInfoMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/auth/AdminOauthUserOtherInfoMapper.xml
new file mode 100644
index 00000000..f8d746e7
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/auth/AdminOauthUserOtherInfoMapper.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
diff --git a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/job/SchedulerManagerTest.java b/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/job/SchedulerManagerTest.java
deleted file mode 100644
index 2d1d6f4c..00000000
--- a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/job/SchedulerManagerTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cn.iocoder.yudao.module.system.job;
-
-import cn.hutool.core.util.StrUtil;
-import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager;
-import cn.iocoder.yudao.module.system.job.auth.UserSessionTimeoutJob;
-import cn.iocoder.yudao.module.system.test.BaseDbUnitTest;
-import org.junit.jupiter.api.Test;
-import org.quartz.SchedulerException;
-
-import javax.annotation.Resource;
-
-public class SchedulerManagerTest extends BaseDbUnitTest {
-
- @Resource
- private SchedulerManager schedulerManager;
-
- @Test
- public void testAddJob() throws SchedulerException {
- String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
- schedulerManager.addJob(1L, jobHandlerName, "test", "0/10 * * * * ? *", 0, 0);
- }
-
- @Test
- public void testUpdateJob() throws SchedulerException {
- String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
- schedulerManager.updateJob(jobHandlerName, "hahaha", "0/20 * * * * ? *", 0, 0);
- }
-
- @Test
- public void testDeleteJob() throws SchedulerException {
- String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
- schedulerManager.deleteJob(jobHandlerName);
- }
-
- @Test
- public void testPauseJob() throws SchedulerException {
- String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
- schedulerManager.pauseJob(jobHandlerName);
- }
-
- @Test
- public void testResumeJob() throws SchedulerException {
- String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
- schedulerManager.resumeJob(jobHandlerName);
- }
-
- @Test
- public void testTriggerJob() throws SchedulerException {
- String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
- schedulerManager.triggerJob(1L, jobHandlerName, "niubi!!!");
- }
-
-}
diff --git a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/mq/RedisStreamTest.java b/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/mq/RedisStreamTest.java
deleted file mode 100644
index c94316a8..00000000
--- a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/mq/RedisStreamTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package cn.iocoder.yudao.module.system.mq;
-
-import cn.hutool.core.thread.ThreadUtil;
-import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
-import cn.iocoder.yudao.module.system.mq.consumer.mail.MailSendConsumer;
-import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer;
-import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
-import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
-import cn.iocoder.yudao.module.system.test.BaseRedisIntegrationTest;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.annotation.Import;
-import org.springframework.data.redis.core.RedisTemplate;
-
-import javax.annotation.Resource;
-import java.util.concurrent.TimeUnit;
-
-public class RedisStreamTest {
-
- @Import({SmsSendConsumer.class, MailSendConsumer.class})
- @Disabled
- public static class ConsumerTest extends BaseRedisIntegrationTest {
-
- @Test
- public void testConsumer() {
- ThreadUtil.sleep(1, TimeUnit.DAYS);
- }
-
- }
-
- @Disabled
- public static class ProducerTest extends BaseRedisIntegrationTest {
-
- @Resource
- private RedisMQTemplate redisMQTemplate;
-
- @Resource
- private RedisTemplate redisTemplate;
-
- @Test
- public void testProducer01() {
- for (int i = 0; i < 100; i++) {
- // 创建消息
- SmsSendMessage message = new SmsSendMessage();
- message.setMobile("15601691300").setApiTemplateId("test:" + i);
- // 发送消息
- redisMQTemplate.send(message);
- }
- }
-
- @Test
- public void testProducer02() {
- // 创建消息
- MailSendMessage message = new MailSendMessage();
- message.setAddress("fangfang@mihayou.com").setTemplateCode("test");
- // 发送消息
- redisMQTemplate.send(message);
- }
-
- }
-
-}
diff --git a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/package-info.java b/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/package-info.java
deleted file mode 100644
index 7b475e53..00000000
--- a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * 占位
- */
-package cn.iocoder.yudao.module.system.service;
diff --git a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/sms/SmsServiceIntegrationTest.java b/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/sms/SmsServiceIntegrationTest.java
deleted file mode 100644
index a8e57ccb..00000000
--- a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/sms/SmsServiceIntegrationTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package cn.iocoder.yudao.module.system.service.sms;
-
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.thread.ThreadUtil;
-import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
-import cn.iocoder.yudao.framework.sms.config.YudaoSmsAutoConfiguration;
-import cn.iocoder.yudao.module.system.test.BaseDbAndRedisIntegrationTest;
-import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer;
-import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer;
-import cn.iocoder.yudao.module.system.service.user.AdminUserService;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.context.annotation.Import;
-
-import javax.annotation.Resource;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-// TODO @芋艿:需要迁移
-@Import({YudaoSmsAutoConfiguration.class,
- SmsChannelServiceImpl.class, SmsSendServiceImpl.class, SmsTemplateServiceImpl.class, SmsLogServiceImpl.class,
- SmsProducer.class, SmsSendConsumer.class})
-public class SmsServiceIntegrationTest extends BaseDbAndRedisIntegrationTest {
-
- @Resource
- private SmsSendServiceImpl smsService;
- @Resource
- private SmsChannelServiceImpl smsChannelService;
-
- @MockBean
- private AdminUserService userService;
-
- @Test
- public void testSendSingleSms_aliyunSuccess() {
- // 参数准备
- String mobile = "15601691399";
- Long userId = 1L;
- Integer userType = UserTypeEnum.ADMIN.getValue();
- String templateCode = "test_02";
- Map templateParams = MapUtil.builder()
- .put("code", "1234").build();
- // 调用
- smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams);
-
- // 等待 MQ 消费
- ThreadUtil.sleep(1, TimeUnit.HOURS);
- }
-
-// @Test
-// public void testDoSendSms() {
-// // 等待 MQ 消费
-// ThreadUtil.sleep(1, TimeUnit.HOURS);
-// }
-
-}
diff --git a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/test/BaseDbAndRedisIntegrationTest.java b/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/test/BaseDbAndRedisIntegrationTest.java
deleted file mode 100644
index 5b9b21ff..00000000
--- a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/test/BaseDbAndRedisIntegrationTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package cn.iocoder.yudao.module.system.test;
-
-import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
-import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
-import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
-import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
-import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
-import org.redisson.spring.starter.RedissonAutoConfiguration;
-import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.ActiveProfiles;
-
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisIntegrationTest.Application.class)
-@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
-public class BaseDbAndRedisIntegrationTest {
-
- @Import({
- // DB 配置类
- DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类
- YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类
- DataSourceAutoConfiguration.class, // Spring DB 自动配置类
- DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
- // MyBatis 配置类
- YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
- MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
-
- // Redis 配置类
- RedisAutoConfiguration.class, // Spring Redis 自动配置类
- YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
- RedissonAutoConfiguration.class, // Redisson 自动高配置类
- })
- public static class Application {
- }
-
-}
diff --git a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/test/BaseRedisIntegrationTest.java b/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/test/BaseRedisIntegrationTest.java
deleted file mode 100644
index f48b2891..00000000
--- a/yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/test/BaseRedisIntegrationTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.iocoder.yudao.module.system.test;
-
-import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
-import org.redisson.spring.starter.RedissonAutoConfiguration;
-import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.ActiveProfiles;
-
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class)
-@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
-public class BaseRedisIntegrationTest {
-
- @Import({
- // Redis 配置类
- RedisAutoConfiguration.class, // Spring Redis 自动配置类
- YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
- RedissonAutoConfiguration.class, // Redisson 自动高配置类
- })
- public static class Application {
- }
-
-}
diff --git a/yudao-module-system/yudao-module-system-biz/src/test-integration/resources/application-integration-test.yaml b/yudao-module-system/yudao-module-system-biz/src/test-integration/resources/application-integration-test.yaml
deleted file mode 100644
index d9612eee..00000000
--- a/yudao-module-system/yudao-module-system-biz/src/test-integration/resources/application-integration-test.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
-spring:
- main:
- lazy-initialization: true # 开启懒加载,加快速度
- banner-mode: off # 单元测试,禁用 Banner
-
---- #################### 数据库相关配置 ####################
-
-spring:
- # 数据源配置项
- autoconfigure:
- exclude:
- - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
- datasource:
- druid: # Druid 【监控】相关的全局配置
- web-stat-filter:
- enabled: true
- stat-view-servlet:
- enabled: true
- allow: # 设置白名单,不填则允许所有访问
- url-pattern: /druid/*
- login-username: # 控制台管理用户名和密码
- login-password:
- filter:
- stat:
- enabled: true
- log-slow-sql: true # 慢 SQL 记录
- slow-sql-millis: 100
- merge-sql: true
- wall:
- config:
- multi-statement-allow: true
- dynamic: # 多数据源配置
- druid: # Druid 【连接池】相关的全局配置
- initial-size: 5 # 初始连接数
- min-idle: 10 # 最小连接池数量
- max-active: 20 # 最大连接池数量
- max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
- time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
- min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
- max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
- validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
- test-while-idle: true
- test-on-borrow: false
- test-on-return: false
- primary: master
- datasource:
- master:
- name: ruoyi-vue-pro
- url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
- driver-class-name: com.mysql.jdbc.Driver
- username: root
- password: 123456
- slave: # 模拟从库,可根据自己需要修改
- name: ruoyi-vue-pro
- url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
- driver-class-name: com.mysql.jdbc.Driver
- username: root
- password: 123456
-
- # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
- redis:
- host: 127.0.0.1 # 地址
- port: 6379 # 端口
- database: 0 # 数据库索引
-
-mybatis:
- lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试
-
---- #################### 定时任务相关配置 ####################
-
---- #################### 配置中心相关配置 ####################
-
---- #################### 服务保障相关配置 ####################
-
-# Lock4j 配置项(单元测试,禁用 Lock4j)
-
-# Resilience4j 配置项
-resilience4j:
- ratelimiter:
- instances:
- backendA:
- limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
- limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
- timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
- register-health-indicator: true # 是否注册到健康监测
-
---- #################### 监控相关配置 ####################
-
---- #################### 芋道相关配置 ####################
-
-# 芋道配置项,设置当前项目所有自定义的配置
-yudao:
- security:
- token-header: Authorization
- token-secret: abcdefghijklmnopqrstuvwxyz
- token-timeout: 1d
- session-timeout: 30m
- mock-enable: true
- mock-secret: test
- swagger:
- enable: false # 单元测试,禁用 Swagger
- file:
- base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
- xss:
- enable: false
- exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
- - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
- - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java
index 1009e922..92ad57d6 100644
--- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java
+++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java
@@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
-import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
import cn.iocoder.yudao.module.system.service.member.MemberService;
import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService;
diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java
index 1a5704d5..8517b9f7 100644
--- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java
+++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImplTest.java
@@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialCl
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialClientDO;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialClientMapper;
-import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties;
import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
import com.xingyuv.jushauth.config.AuthConfig;
@@ -44,8 +44,6 @@ import static org.mockito.Mockito.*;
/**
* {@link SocialClientServiceImpl} 的单元测试类
- *
-
*/
@Import(SocialClientServiceImpl.class)
public class SocialClientServiceImplTest extends BaseDbUnitTest {
@@ -278,7 +276,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
when(userService.getPhoneNoInfo(eq(phoneCode))).thenReturn(phoneNumber);
// 调用
- WxMaPhoneNumberInfo result = socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode);
+ WxMaPhoneNumberInfo result = socialClientService.getWxMaPhoneNumberInfo(SocialTypeEnum.WECHAT_MINI_APP.getType(), userType, phoneCode);
// 断言
assertSame(phoneNumber, result);
}
@@ -295,7 +293,7 @@ public class SocialClientServiceImplTest extends BaseDbUnitTest {
when(userService.getPhoneNoInfo(eq(phoneCode))).thenThrow(wxErrorException);
// 调用并断言异常
- assertServiceException(() -> socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode),
+ assertServiceException(() -> socialClientService.getWxMaPhoneNumberInfo(SocialTypeEnum.WECHAT_MINI_APP.getType(), userType, phoneCode),
SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR);
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java
index d677f065..051694b3 100644
--- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java
+++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java
@@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper;
import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserMapper;
-import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import com.xingyuv.jushauth.model.AuthUser;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;