diff --git a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java index b0ab0e3..e1f4311 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java @@ -616,13 +616,6 @@ public class MainController extends BaseController { if (param == null) { return fail("参数不能为空"); } - // 默认配置(当租户未配置短信服务时使用) - String accessKeyId = "LTAI5t7jGTFTbpSLzzXY8HzP"; - String accessKeySecret = "Z22EPJyUhQaIZfEEmZ4Hdbw6xZibCb"; - String templateCode = "SMS_481670203"; - String signName = "网宿信息"; - String regionId = "cn-hangzhou"; - if (!CommonUtil.isValidPhoneNumber(param.getPhone())) { return fail("请输入有效的手机号码"); } @@ -655,13 +648,48 @@ public class MainController extends BaseController { return fail("租户ID格式不正确"); } } + return sendSmsCaptchaInternal(param, tenantId); + + } + + @Operation(summary = "发送短信验证码(后台管理员, 跨租户)") + @PostMapping("/sendSmsCaptchaByAdmin") + public ApiResult sendSmsCaptchaByAdmin(@RequestBody SmsCaptchaParam param) { + if (param == null) { + return fail("参数不能为空"); + } + if (!CommonUtil.isValidPhoneNumber(param.getPhone())) { + return fail("请输入有效的手机号码"); + } + // 跨租户校验:只要某个租户下该手机号是超级管理员或管理员即可发送验证码 + final User admin = userService.getByPhoneAndAdmin(param.getPhone()); + if (ObjectUtil.isEmpty(admin)) { + return fail("该手机号码未注册管理员账号!"); + } + // 使用管理员所在租户的短信配置发送 + return sendSmsCaptchaInternal(param, admin.getTenantId()); + } + + /** + * 短信发送核心逻辑 + * + * @param param 参数 + * @param configTenantId 用于读取租户短信配置的租户ID,为 null 时使用默认配置 + */ + private ApiResult sendSmsCaptchaInternal(SmsCaptchaParam param, Integer configTenantId) { + // 默认配置(当租户未配置短信服务时使用) + String accessKeyId = "LTAI5t7jGTFTbpSLzzXY8HzP"; + String accessKeySecret = "Z22EPJyUhQaIZfEEmZ4Hdbw6xZibCb"; + String templateCode = "SMS_481670203"; + String signName = "网宿信息"; + String regionId = "cn-hangzhou"; // 读取租户的短信配置(SettingController写入的key格式为:sms:{tenantId}) - if (tenantId != null) { - String settingJson = redisUtil.get("sms:" + tenantId); + if (configTenantId != null) { + String settingJson = redisUtil.get("sms:" + configTenantId); // 兼容历史key if (StrUtil.isBlank(settingJson)) { - settingJson = redisUtil.get("setting:sms:" + tenantId); + settingJson = redisUtil.get("setting:sms:" + configTenantId); } if (StrUtil.isNotBlank(settingJson)) { JSONObject jsonObject = JSONObject.parseObject(settingJson); diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/UserMapper.java b/src/main/java/com/gxwebsoft/common/system/mapper/UserMapper.java index 0dce068..cdea5cd 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/UserMapper.java +++ b/src/main/java/com/gxwebsoft/common/system/mapper/UserMapper.java @@ -117,4 +117,13 @@ public interface UserMapper extends BaseMapper { @InterceptorIgnore(tenantLine = "true") User selectLastLoginDeveloperByPhone(@Param("phone") String phone); + /** + * 根据手机号查询管理员账号(跨租户:超级管理员或普通管理员均可,忽略租户隔离) + * + * @param phone 手机号 + * @return User + */ + @InterceptorIgnore(tenantLine = "true") + User selectAdminByPhoneCrossTenant(@Param("phone") String phone); + } diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml index b56f60e..cfe34c0 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml @@ -448,4 +448,16 @@ LIMIT 1 + + + diff --git a/src/main/java/com/gxwebsoft/common/system/service/UserService.java b/src/main/java/com/gxwebsoft/common/system/service/UserService.java index 4e50822..fd8d8d7 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/UserService.java +++ b/src/main/java/com/gxwebsoft/common/system/service/UserService.java @@ -144,6 +144,14 @@ public interface UserService extends IService, UserDetailsService { */ User getLastLoginDeveloperByPhone(String phone); + /** + * 根据手机号查询管理员账号(跨租户:超级管理员或普通管理员均可,忽略租户隔离) + * + * @param phone 手机号 + * @return 用户信息 + */ + User getByPhoneAndAdmin(String phone); + List pageAll(UserParam param); User getByUserId(String userId); diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java index a5332f6..37f1091 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java @@ -410,6 +410,11 @@ public class UserServiceImpl extends ServiceImpl implements Us return baseMapper.selectLastLoginDeveloperByPhone(phone); } + @Override + public User getByPhoneAndAdmin(String phone) { + return baseMapper.selectAdminByPhoneCrossTenant(phone); + } + @Override public List pageAll(UserParam param) { return baseMapper.pageRelAll(param);