feat: 创建租户并关联腾讯云域名

This commit is contained in:
hucs
2024-04-19 18:17:17 +08:00
parent 993f975edd
commit a0cd0312a5
2 changed files with 43 additions and 4 deletions

View File

@@ -125,6 +125,13 @@
<version>2.4.6</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-dnspod</artifactId>
<version>3.1.322</version>
</dependency>
</dependencies>
<build>

View File

@@ -2,7 +2,9 @@ package com.starry.admin.modules.platform.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -22,6 +24,12 @@ import com.starry.admin.utils.SecurityUtils;
import com.starry.common.constant.CacheConstants;
import com.starry.common.redis.RedisCache;
import com.starry.common.result.R;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.dnspod.v20210323.DnspodClient;
import com.tencentcloudapi.dnspod.v20210323.models.CreateRecordRequest;
import com.tencentcloudapi.dnspod.v20210323.models.CreateRecordResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,6 +45,7 @@ import java.util.stream.Collectors;
* @author admin
* @since 2023-03-03
*/
@Slf4j
@Service
public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenantEntity> implements ISysTenantService {
@Resource
@@ -163,16 +172,18 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
@Transactional(rollbackFor = Exception.class)
@Override
public R addTenant(SysTenantEntity sysTenantEntity) {
// 判断账号是否存在
if (sysUserMapper.checkUserNameUnique(sysTenantEntity.getUserName()) > 0) {
return R.error("管理员账号已存在,请重新设置!");
}
if (StrUtil.isBlankIfStr(sysTenantEntity.getTenantId())) {
sysTenantEntity.setTenantId(IdUtil.fastSimpleUUID());
}
if (StrUtil.isBlankIfStr(sysTenantEntity.getTenantCode())) {
sysTenantEntity.setTenantCode(IdUtil.fastSimpleUUID());
}
// 判断账号是否存在
if (sysUserMapper.checkUserNameUnique(sysTenantEntity.getUserName()) > 0) {
return R.error("管理员账号已存在,请重新设置!");
}
// 生成随机key用来生成域名关键
sysTenantEntity.setTenantKey(RandomUtil.randomString(8));
// 创建租户
sysTenantMapper.insert(sysTenantEntity);
// 创建默认部门--部门默认名称以租户名称
@@ -181,9 +192,12 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
Long roleId = createRole(sysTenantEntity);
// 创建默认账号
createUser(sysTenantEntity, deptId, roleId);
// 创建域名
this.createDomainAndDns(sysTenantEntity.getTenantKey());
return R.ok("租户创建成功!");
}
private Long createDept(SysTenantEntity sysTenantEntity) {
// 创建部门
SysDeptEntity dept = new SysDeptEntity();
@@ -293,4 +307,22 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
queryWrapper.eq(SysTenantEntity::getTenantId, packageId);
return this.baseMapper.selectList(queryWrapper);
}
public void createDomainAndDns(String tenentKey) {
Credential cred = new Credential("AKIDESceXUSmHvcFnFbqv3Tjnjn02FRZWKwW", "cFyys2FG7sV1Mm6KONVqNuHXjrvoaVSU");
DnspodClient dnspodClient = new DnspodClient(cred, "");
CreateRecordRequest req = new CreateRecordRequest();
req.setDomain("hucs.top");
req.setRecordType("A");
req.setRecordLine("默认");
req.setValue("122.51.20.105");
req.setSubDomain(tenentKey + ".july");
CreateRecordResponse createRecordResponse;
try {
createRecordResponse = dnspodClient.CreateRecord(req);
} catch (TencentCloudSDKException e) {
throw new RuntimeException(e);
}
log.info("腾讯云域名映射结果:{}", JSONObject.toJSONString(createRecordResponse));
}
}