/** * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com). *

* 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 *

* http://www.apache.org/licenses/LICENSE-2.0 *

* 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 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 selectTenantPage(IPage page, Tenant tenant) { return page.setRecords(baseMapper.selectTenantPage(page, tenant)); } @Override public Tenant getByTenantId(String tenantId) { return getOne(Wrappers.query().lambda().eq(Tenant::getTenantId, tenantId)); } @Override @Transactional(rollbackFor = Exception.class) public boolean saveTenant(Tenant tenant) { if (Func.isEmpty(tenant.getId())) { List tenants = baseMapper.selectList(Wrappers.query().lambda().eq(Tenant::getIsDeleted, BladeConstant.DB_NOT_DELETED)); List 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 result = userClient.saveUser(user); if (!result.isSuccess()) { throw new ServiceException(result.getMsg()); } return temp; } return super.saveOrUpdate(tenant); } private String getTenantId(List codes) { String code = tenantId.generate(); if (codes.contains(code)) { return getTenantId(codes); } return code; } }