package com.shanjupay.user.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shanjupay.common.domain.BusinessException;
import com.shanjupay.common.domain.CommonErrorCode;
import com.shanjupay.common.domain.PageVO;
import com.shanjupay.common.util.MD5Util;
import com.shanjupay.common.util.PhoneUtil;
import com.shanjupay.common.util.RandomStringUtil;
import com.shanjupay.user.api.AuthorizationService;
import com.shanjupay.user.api.ResourceService;
import com.shanjupay.user.api.TenantService;
import com.shanjupay.user.api.dto.authorization.AuthorizationInfoDTO;
import com.shanjupay.user.api.dto.authorization.RoleDTO;
import com.shanjupay.user.api.dto.resource.ApplicationDTO;
import com.shanjupay.user.api.dto.tenant.*;
import com.shanjupay.user.convert.*;
import com.shanjupay.user.entity.*;
import com.shanjupay.user.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class TenantServiceImpl implements TenantService {
@Autowired
private TenantMapper tenantMapper;
@Autowired
private BundleMapper bundleMapper;
@Autowired
private AccountMapper accountMapper;
@Autowired
private TenantAccountMapper tenantAccountMapper;
@Autowired
private AccountRoleMapper accountRoleMapper;
@Autowired
private AuthorizationRoleMapper roleMapper;
@Autowired
private AuthorizationRolePrivilegeMapper rolePrivilegeMapper;
@Autowired
private AuthorizationService authorizationService;
@Autowired
private ResourceService resourceService;
@Autowired
private ResourceApplicationMapper resourceApplicationMapper;
//////////////////////////////////////////租户相关的操作///////////////////////////////////////////////////
/**
* 创建租户如果已存在租户则返回租户信息,否则新增租户、新增租户管理员,同时初始化权限
* 1.若管理员用户名已存在,禁止创建
* 2.手机号已存在,禁止创建
* 3.创建根租户对应账号时,需要手机号,账号的用户名密码
* @param createTenantRequest 创建租户请求信息
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public TenantDTO createTenantAndAccount(CreateTenantRequestDTO createTenantRequest) {
//1.判断手机号跟用户名在账号中是否存在
String mobile = createTenantRequest.getMobile();
if(isExistAccountByMobile(mobile)) {//为true表示 手机号已存在
//throw new BusinessException(CommonErrorCode.E_200203);
AccountDTO account = getAccountByMobile(mobile);
Long accountId = account.getId();
Boolean isAdmin = true;
//获取到租户信息并返回
TenantDTO tenant = getTenantByAccount(accountId, isAdmin);
if(tenant==null){
//创建租户
Tenant ten = createTenant(createTenantRequest);
//绑定租户和账号的关系,设置为管理员
bindTenantAccount(ten.getId(),accountId,true);
return TenantConvert.INSTANCE.entity2dto(ten);
}else{
return tenant;
}
}else{
//2.新增租户
Tenant tenant = createTenant(createTenantRequest);
//3.创建管理员账号并绑定租户
CreateAccountRequestDTO createAccountRequest = new CreateAccountRequestDTO();
createAccountRequest.setMobile(mobile);
createAccountRequest.setUsername(createTenantRequest.getUsername());
createAccountRequest.setPassword(createTenantRequest.getPassword());
createAccountInTenant(createAccountRequest,tenant.getId());
//4.初始化套餐
//设置租户套餐为初始化套餐
if (tenant.getId() == null) {
throw new BusinessException(CommonErrorCode.E_200012);
}
//设置初始化套餐,更新权限
log.info("初始化套餐");
initBundle(tenant.getId(), createTenantRequest.getBundleCode());
return TenantConvert.INSTANCE.entity2dto(tenant);
}
}
private Tenant createTenant(CreateTenantRequestDTO createTenantRequest){
//新增租户
Tenant tenant = new Tenant();
//租户名随机生成
tenant.setName(createTenantRequest.getName() + "_" +RandomStringUtil.getRandomString(6));
//设置租户类型
tenant.setTenantTypeCode(createTenantRequest.getTenantTypeCode());
//设置套餐code
tenant.setBundleCode(createTenantRequest.getBundleCode());
tenantMapper.insert(tenant);
return tenant;
}
@Override
@Transactional(rollbackFor = Exception.class)
public TenantDTO createTenantRelateAccount(CreateTenantRequestDTO createTenantRequest) {
AccountDTO accountDTO = this.getAccountByUsername(createTenantRequest.getUsername());
if(accountDTO == null){
throw new BusinessException(CommonErrorCode.E_110001);
}
//2.新增租户
Tenant tenant = new Tenant();
tenant.setName(createTenantRequest.getName() + "_" + RandomStringUtil.getRandomString(8));
//设置租户类型
tenant.setTenantTypeCode(createTenantRequest.getTenantTypeCode());
//设置套餐code
tenant.setBundleCode(createTenantRequest.getBundleCode());
int insert = tenantMapper.insert(tenant);
bindTenantAccount(tenant.getId(), accountDTO.getId(),true);
initBundle(tenant.getId(), createTenantRequest.getBundleCode());
return TenantConvert.INSTANCE.entity2dto(tenant);
}
/**
* 删除租户
* 解绑租户下所有账号,清除租户下账号-角色信息,清除租户下角色,删除租户
* @param id 租户id
*/
@Override
public void removeTenant(Long id) {
//预留接口,暂不实现
}
/**
* 获取租户信息
* @param id
* @return 租户信息
*/
@Override
public TenantDTO getTenant(Long id) {
Tenant entity = tenantMapper.selectById(id);
return TenantConvert.INSTANCE.entity2dto(entity);
}
/**
* 检索租户
* @param tenantQuery 租户查询条件
* @param pageNo 查询页
* @param pageSize 页记录数
* @param sortBy 排序字段
* @param order 顺序
* @return
*/
@Override
public PageVO<TenantDTO> queryTenants(TenantQueryDTO tenantQuery, Integer pageNo, Integer pageSize, String sortBy, String order) {
Page<TenantDTO> page = new Page<>(pageNo, (pageSize == null || pageSize < 1 ? 10 : pageSize));// 当前页,总条数 构造 page 对象
List<TenantDTO> tenants = tenantMapper.selectTenantByPage(page, tenantQuery, sortBy, order);
return new PageVO<>(tenants, page.getTotal(), pageNo, pageSize);
}
/**
* 查询某租户类型的套餐列表(不包含初始化套餐)
* @param tenantType
* @return
*/
@Override
public List<BundleDTO> queryBundleByTenantType(String tenantType) {
QueryWrapper
没有合适的资源?快使用搜索试试~ 我知道了~
sharding-jdbc分库分表
共1178个文件
xml:357个
class:295个
java:279个
需积分: 2 0 下载量 159 浏览量
2022-07-23
16:53:26
上传
评论
收藏 3.67MB ZIP 举报
温馨提示
sharding-jdbc 分库分表 + 读写分离 demo演示 可正常运行学习
资源详情
资源评论
资源推荐
收起资源包目录
sharding-jdbc分库分表 (1178个子文件)
TenantServiceImpl.class 33KB
AuthorizationServiceImpl.class 21KB
RefundOrder.class 18KB
OrderResultDTO.class 16KB
OrderDTO.class 16KB
PayOrder.class 16KB
TransactionServiceImpl.class 14KB
MerchantServiceImpl.class 14KB
ResourceServiceImpl.class 13KB
TenantController.class 12KB
PayOrderDTO.class 12KB
PayChannelAgentServiceImpl.class 11KB
PaymentBill.class 11KB
PayChannelServiceImpl.class 10KB
AlipayBCScanBean.class 10KB
WeChatBeanScan.class 10KB
DateUtil.class 9KB
MerchantDTO.class 8KB
StringUtils.class 8KB
PaymentBillDTO.class 8KB
ClientDefaultAccessTokenConverter.class 8KB
ClientDefaultAccessTokenConverter.class 8KB
CommonErrorCode.class 8KB
Merchant.class 8KB
PaymentResponseDTO.class 8KB
AuthorizationController.class 7KB
PayController.class 7KB
WeChatBean.class 7KB
AuthorizationServer.class 7KB
MenuDTO.class 7KB
RSAUtil.class 7KB
ResourceController.class 7KB
SecurityConfig.class 7KB
TokenAuthenticationFilter.class 7KB
AppServiceImpl.class 6KB
ResourceAPPDTO.class 6KB
BundleDTO.class 6KB
Bundle.class 6KB
MerchantController.class 6KB
WxPayController.class 6KB
ResourceButton.class 6KB
ResourceMenu.class 6KB
StringUtil.class 6KB
MenuServiceImpl.class 6KB
Staff.class 6KB
MerchantDetailVO.class 6KB
StaffDTO.class 6KB
IntegrationUserDetailsAuthenticationHandler.class 6KB
PlatformParamController.class 5KB
LoginInfoDTO.class 5KB
AliConfigParam.class 5KB
PayChannelParamDTO.class 5KB
AlipayBean.class 5KB
GoodsDetail.class 5KB
QiniuUtils.class 5KB
PayTestController.class 5KB
ResouceServerConfig$OperationServerConfig.class 5KB
ResouceServerConfig$MerchantServerConfig.class 5KB
PrivilegeTreeDTO.class 5KB
ResouceServerConfig$PortalServerConfig.class 5KB
StoreDTO.class 5KB
TestPayChannelAgentService.class 5KB
ResouceServerConfig$APIServerConfig.class 5KB
Store.class 5KB
ResouceServerConfig$XCServiceServerConfig.class 5KB
ResouceServerConfig$PaymentAgentReceiverServerConfig.class 5KB
RestOAuth2WebResponseExceptionTranslator.class 5KB
OauthRepositoryJdbc.class 5KB
UnifiedUserAuthenticationConverter.class 5KB
StoreController.class 5KB
SmsServiceImpl.class 4KB
OrderConfirmVO.class 4KB
PayChannelParam.class 4KB
OauthClientDetails.class 4KB
CreateTenantRequestDTO.class 4KB
App.class 4KB
Student.class 4KB
TenantService.class 4KB
IntegrationUserDetailsAuthenticationProvider.class 4KB
RoleDTO.class 4KB
PayConsumer.class 4KB
QRCodeUtil.class 4KB
AccountMapper.class 4KB
ResouceServerConfig$UAAServerConfig.class 4KB
Account.class 4KB
AppDTO.class 4KB
PayOrderConvertImpl.class 4KB
LoginUser.class 4KB
OrderResultConvertImpl.class 4KB
MerchantRegisterVO.class 4KB
RedisCache.class 3KB
AccountDTO.class 3KB
RestTemplateTest.class 3KB
AuthenticationInfo.class 3KB
OauthClientDetailsServiceImpl.class 3KB
AuthorizationPrivilege.class 3KB
TenantAccount.class 3KB
LoginRequestDTO.class 3KB
RestResponse.class 3KB
Tenant.class 3KB
共 1178 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
就你最近的表现
- 粉丝: 9
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0