137 lines
4.6 KiB
Java
137 lines
4.6 KiB
Java
/**
|
|
* Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
|
|
* <p>
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* <p>
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
* <p>
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package org.springblade.system.service.impl;
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import lombok.AllArgsConstructor;
|
|
import org.springblade.core.boot.tenant.TenantId;
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
import org.springblade.core.tool.api.R;
|
|
import org.springblade.core.tool.constant.BladeConstant;
|
|
import org.springblade.core.tool.utils.DigestUtil;
|
|
import org.springblade.core.tool.utils.Func;
|
|
import org.springblade.system.entity.Dept;
|
|
import org.springblade.system.entity.Post;
|
|
import org.springblade.system.entity.Role;
|
|
import org.springblade.system.entity.Tenant;
|
|
import org.springblade.system.mapper.DeptMapper;
|
|
import org.springblade.system.mapper.PostMapper;
|
|
import org.springblade.system.mapper.RoleMapper;
|
|
import org.springblade.system.mapper.TenantMapper;
|
|
import org.springblade.system.service.ITenantService;
|
|
import org.springblade.system.user.entity.User;
|
|
import org.springblade.system.user.feign.IUserClient;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* 服务实现类
|
|
*
|
|
* @author Chill
|
|
*/
|
|
@Service
|
|
@AllArgsConstructor
|
|
public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> implements ITenantService {
|
|
|
|
private final TenantId tenantId;
|
|
private final RoleMapper roleMapper;
|
|
private final DeptMapper deptMapper;
|
|
private final PostMapper postMapper;
|
|
private final IUserClient userClient;
|
|
|
|
@Override
|
|
public IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant) {
|
|
return page.setRecords(baseMapper.selectTenantPage(page, tenant));
|
|
}
|
|
|
|
@Override
|
|
public Tenant getByTenantId(String tenantId) {
|
|
return getOne(Wrappers.<Tenant>query().lambda().eq(Tenant::getTenantId, tenantId));
|
|
}
|
|
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public boolean saveTenant(Tenant tenant) {
|
|
if (Func.isEmpty(tenant.getId())) {
|
|
List<Tenant> tenants = baseMapper.selectList(Wrappers.<Tenant>query().lambda().eq(Tenant::getIsDeleted, BladeConstant.DB_NOT_DELETED));
|
|
List<String> codes = tenants.stream().map(Tenant::getTenantId).collect(Collectors.toList());
|
|
String tenantId = getTenantId(codes);
|
|
tenant.setTenantId(tenantId);
|
|
// 新建租户对应的默认角色
|
|
Role role = new Role();
|
|
role.setTenantId(tenantId);
|
|
role.setParentId(0L);
|
|
role.setRoleName("管理员");
|
|
role.setRoleAlias("admin");
|
|
role.setSort(2);
|
|
role.setIsDeleted(0);
|
|
roleMapper.insert(role);
|
|
// 新建租户对应的默认部门
|
|
Dept dept = new Dept();
|
|
dept.setTenantId(tenantId);
|
|
dept.setParentId(0L);
|
|
dept.setDeptName(tenant.getTenantName());
|
|
dept.setFullName(tenant.getTenantName());
|
|
dept.setSort(2);
|
|
dept.setIsDeleted(0);
|
|
deptMapper.insert(dept);
|
|
// 新建租户对应的默认岗位
|
|
Post post = new Post();
|
|
post.setTenantId(tenantId);
|
|
post.setCategory(1);
|
|
post.setPostCode("ceo");
|
|
post.setPostName("首席执行官");
|
|
post.setSort(1);
|
|
postMapper.insert(post);
|
|
// 新建租户对应的默认管理用户
|
|
User user = new User();
|
|
user.setTenantId(tenantId);
|
|
user.setName("admin");
|
|
user.setRealName("admin");
|
|
user.setAccount("admin");
|
|
user.setPassword(DigestUtil.encrypt("admin"));
|
|
user.setRoleId(String.valueOf(role.getId()));
|
|
user.setDeptId(String.valueOf(dept.getId()));
|
|
user.setPostId(String.valueOf(post.getId()));
|
|
user.setBirthday(new Date());
|
|
user.setSex(1);
|
|
user.setIsDeleted(BladeConstant.DB_NOT_DELETED);
|
|
boolean temp = super.saveOrUpdate(tenant);
|
|
R<Boolean> result = userClient.saveUser(user);
|
|
if (!result.isSuccess()) {
|
|
throw new ServiceException(result.getMsg());
|
|
}
|
|
return temp;
|
|
}
|
|
return super.saveOrUpdate(tenant);
|
|
}
|
|
|
|
private String getTenantId(List<String> codes) {
|
|
String code = tenantId.generate();
|
|
if (codes.contains(code)) {
|
|
return getTenantId(codes);
|
|
}
|
|
return code;
|
|
}
|
|
|
|
}
|