From e12e717a045c4b5d9893ddac9135c1721e7a0cc3 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期四, 16 三月 2023 17:58:26 +0800 Subject: [PATCH] 上传更改过的源码jar包,上传租户管理相关功能 --- Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java | 272 ++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 181 insertions(+), 91 deletions(-) diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java index 5fcbc3c..bcb74b6 100644 --- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java +++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java @@ -16,10 +16,16 @@ */ package org.springblade.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import javafx.geometry.Pos; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; +import org.apache.ibatis.mapping.Environment; +import org.springblade.common.constant.TenantConstant; import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; @@ -38,13 +44,17 @@ import org.springblade.system.user.entity.User; import org.springblade.system.user.enums.UserEnum; import org.springblade.system.user.feign.IUserClient; +import org.springblade.system.vo.TenantVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; +import javax.annotation.PostConstruct; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.*; import java.util.stream.Collectors; import static org.springblade.common.constant.TenantConstant.*; @@ -56,7 +66,7 @@ * @author Chill */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> implements ITenantService { private final TenantId tenantId; @@ -67,6 +77,25 @@ private final IRoleMenuService roleMenuService; private final IDictBizService dictBizService; private final IUserClient userClient; + /** + * 鑾峰彇鏄惁鍏佽鑷鎺у埗涓夊憳鏄惁寮�鍚� + */ + @Value("${ssa.ssa-enable}") + private Boolean ssaEnable; + /** + * 鑾峰彇榛樿涓夊憳绠$悊鍛樼殑鍚嶇О + */ + @Value("#{'${ssa.ssa-names}'.split(',')}") + private List<String> ssaNames; + /** + * 涓夊憳绠$悊鑿滃崟閰嶇疆 + */ + @Value("#{'${ssa.sys-menus}'.split(',')}") + private List<String> sysMenus; + @Value("#{'${ssa.sec-menus}'.split(',')}") + private List<String> secMenus; + @Value("#{'${ssa.audit-menus}'.split(',')}") + private List<String> auditMenus; @Override public IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant) { @@ -80,82 +109,79 @@ @Override @Transactional(rollbackFor = Exception.class) - public boolean submitTenant(Tenant tenant) { + public boolean submitTenant(TenantVO tenant) { if (Func.isEmpty(tenant.getId())) { + // 鑾峰彇鍒版湭鍒犻櫎绉熸埛鎬绘暟锛岀敓鎴愭柊鐨勭鎴穒d 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); - // 鑾峰彇鍙傛暟閰嶇疆鐨勮处鍙烽搴� - int accountNumber = Func.toInt(ParamCache.getValue(ACCOUNT_NUMBER_KEY), DEFAULT_ACCOUNT_NUMBER); - tenant.setAccountNumber(accountNumber); - // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁よ鑹� - Role role = new Role(); - role.setTenantId(tenantId); - role.setParentId(BladeConstant.TOP_PARENT_ID); - role.setRoleName("绠$悊鍛�"); - role.setRoleAlias("admin"); - role.setSort(2); - role.setIsDeleted(BladeConstant.DB_NOT_DELETED); - roleService.save(role); - // 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄� - LinkedList<Menu> userMenus = new LinkedList<>(); - // 鑾峰彇鍙傛暟閰嶇疆鐨勯粯璁よ彍鍗曢泦鍚堬紝閫楀彿闅斿紑 - List<String> menuCodes = Func.toStrList(ParamCache.getValue(ACCOUNT_MENU_CODE_KEY)); - List<Menu> menus = getMenus((menuCodes.size() > 0 ? menuCodes : MENU_CODES), userMenus); - List<RoleMenu> roleMenus = new ArrayList<>(); - menus.forEach(menu -> { - RoleMenu roleMenu = new RoleMenu(); - roleMenu.setMenuId(menu.getId()); - roleMenu.setRoleId(role.getId()); - roleMenus.add(roleMenu); - }); - roleMenuService.saveBatch(roleMenus); - // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂� - Dept dept = new Dept(); - dept.setTenantId(tenantId); - dept.setParentId(BladeConstant.TOP_PARENT_ID); - dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID)); - dept.setDeptName(tenant.getTenantName()); - dept.setFullName(tenant.getTenantName()); - dept.setDeptCategory(1); - dept.setSort(2); - dept.setIsDeleted(BladeConstant.DB_NOT_DELETED); - deptService.save(dept); - // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣� - Post post = new Post(); - post.setTenantId(tenantId); - post.setCategory(1); - post.setPostCode("ceo"); - post.setPostName("棣栧腑鎵ц瀹�"); - post.setSort(1); - postService.save(post); - // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏� - LinkedList<DictBiz> dictBizs = new LinkedList<>(); - List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs); - dictBizService.saveBatch(dictBizList); - // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴� - User user = new User(); - user.setTenantId(tenantId); - user.setName("admin"); - user.setRealName("admin"); - user.setAccount("admin"); - // 鑾峰彇鍙傛暟閰嶇疆鐨勫瘑鐮� - String password = Func.toStr(ParamCache.getValue(PASSWORD_KEY), DEFAULT_PASSWORD); - user.setPassword(password); - 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.setUserType(UserEnum.WEB.getCategory()); - 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()); + // 閰嶇疆涓篺alse锛屽苟涓斿墠绔紶杈撶殑鍙傛暟涓篺alse灏变笉闇�瑕佸垱寤轰笁鍛� + if(!this.ssaEnable && !tenant.getMembersFlag()){ + // 涓嶅紑鍚笁鍛樼鐞嗘椂鐩存帴鍒涘缓涓�涓渶楂樻潈闄愮殑绠$悊鍛� + Role role = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瓒呯骇绠$悊鍛�",1,"admin",BladeConstant.DB_NOT_DELETED); + roleService.save(role); + // 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄� + saveRoleMenus(role, MENU_CODES); + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂� + Dept dept = generateDept(tenantId, tenant); + deptService.save(dept); + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣� + Post postInfo = generatePost(tenantId, 1, "ceo", "棣栧腑鎵ц瀹�", 1); + postService.save(postInfo); + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏� + LinkedList<DictBiz> dictBizs = new LinkedList<>(); + List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs); + dictBizService.saveBatch(dictBizList); + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴� + User userInfo = generateUser(tenantId, role, dept, postInfo); + // 鍏堜繚瀛樼鎴� + boolean temp = super.saveOrUpdate(tenant); + // 鍒涘缓鐢ㄦ埛 + R<Boolean> result = userClient.saveUser(userInfo); + if (!result.isSuccess()) { + throw new ServiceException(result.getMsg()); + } + return temp; + }else { + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁よ鑹� + List<Role> roles = new ArrayList<>(); + Role roleSys = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"绯荤粺绠$悊鍛�",1,this.ssaNames.get(0),BladeConstant.DB_NOT_DELETED); + Role roleSec = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹夊叏绠$悊鍛�",2,this.ssaNames.get(1),BladeConstant.DB_NOT_DELETED); + Role roleAudit = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹¤绠$悊鍛�",3,this.ssaNames.get(2),BladeConstant.DB_NOT_DELETED); + roles.add(roleSys); + roles.add(roleSec); + roles.add(roleAudit); + roleService.saveBatch(roles); + // 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄� + saveRoleMenus(roleSys,this.sysMenus); //绯荤粺绠$悊鍛樿鑹茶彍鍗曟潈闄� + saveRoleMenus(roleSec,this.secMenus); //瀹夊叏绠$悊鍛樿鑹茶彍鍗曟潈闄� + saveRoleMenus(roleAudit,this.auditMenus); //瀹¤绠$悊鍛樿鑹茶彍鍗曟潈闄� + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂� + Dept dept = generateDept(tenantId, tenant); + deptService.save(dept); + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣� + Post postCeo = generatePost(tenantId, 1, "sysAdmin", "绯荤粺绠$悊鍛�", 1); + Post postCto = generatePost(tenantId,1,"secAdmin","瀹夊叏绠$悊鍛�",4); + Post postCio = generatePost(tenantId,1,"auditAdmin","瀹¤绠$悊鍛�",5); + postService.saveBatch(Arrays.asList(postCeo,postCto,postCio)); + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏� + LinkedList<DictBiz> dictBizs = new LinkedList<>(); + List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs); + dictBizService.saveBatch(dictBizList); + // 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴� + User userSys = generateUser(tenantId, roleSys, dept, postCeo); + User userSec = generateUser(tenantId,roleSec,dept,postCto); + User userAudit = generateUser(tenantId,roleAudit,dept,postCio); + // 鍏堜繚瀛樼鎴� + boolean temp = super.saveOrUpdate(tenant); + // 鍒涘缓鐢ㄦ埛 + R<Boolean> result = userClient.saveUserList(Arrays.asList(userSys,userSec,userAudit)); + if (!result.isSuccess()) { + throw new ServiceException(result.getMsg()); + } + return temp; } - return temp; } else { CacheUtil.clear(SYS_CACHE, tenant.getTenantId()); return super.saveOrUpdate(tenant); @@ -180,22 +206,87 @@ } @Override - public boolean setting(Integer accountNumber, Date expireTime, String ids) { - List<String> tenantIds = this.list(Wrappers.<Tenant>query().lambda().in(Tenant::getId, ids)) - .stream().map(tenant -> Func.toStr(tenant.getTenantId())).distinct().collect(Collectors.toList()); - CacheUtil.clear(SYS_CACHE, tenantIds); - Func.toLongList(ids).forEach(id -> { - Kv kv = Kv.create().set("accountNumber", accountNumber).set("expireTime", expireTime).set("id", id); - String licenseKey = DesUtil.encryptToHex(JsonUtil.toJson(kv), DES_KEY); - update( - Wrappers.<Tenant>update().lambda() - .set(Tenant::getAccountNumber, accountNumber) - .set(Tenant::getExpireTime, expireTime) - .set(Tenant::getLicenseKey, licenseKey) - .eq(Tenant::getId, id) - ); + public List<Map<String,Object>> selectMaps(){ + List<Map<String, Object>> maps = listMaps(new QueryWrapper<Tenant>().select("TENANT_ID", "TENANT_NAME")); + System.out.println(maps); + return maps; + } + + @Override + public boolean findIsOpen() { + return this.ssaEnable; + } + + /** + * 鍒涘缓绉熸埛涓嬬殑榛樿宀椾綅 + * @param tenantId + * @param sort + */ + private Post generatePost(String tenantId,Integer categ,String postCode,String postName,Integer sort){ + Post post = new Post(); + post.setTenantId(tenantId); + post.setCategory(categ); + post.setPostCode(postCode); + post.setPostName(postName); + post.setSort(sort); + return post; + } + + /** + * 鍒涘缓榛樿鐢ㄦ埛锛屽苟杩涜鐩稿叧鏉冮檺璁剧疆 + */ + private User generateUser(String tenantId, Role role, Dept dept, Post post){ + User user = new User(); + user.setTenantId(tenantId); + user.setName(role.getRoleAlias()); + user.setRealName(role.getRoleName()); + user.setAccount(role.getRoleAlias()); + // 鑾峰彇鍙傛暟閰嶇疆鐨勫瘑鐮� + String password = Func.toStr(ParamCache.getValue(PASSWORD_KEY), DEFAULT_PASSWORD); + user.setPassword(password); + 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.setUserType(UserEnum.WEB.getCategory()); + user.setIsDeleted(BladeConstant.DB_NOT_DELETED); + return user; + } + + /** + * 淇濆瓨鐢ㄦ埛瀵瑰簲鐨勫叧鑱斾俊鎭� + * @param role + */ + private void saveRoleMenus(Role role,List<String> stringMenus){ + LinkedList<Menu> userMenus = new LinkedList<>(); + // 鑾峰彇鍙傛暟閰嶇疆鐨勯粯璁よ彍鍗曢泦鍚堬紝閫楀彿闅斿紑 + List<String> menuCodes = Func.toStrList(ParamCache.getValue(ACCOUNT_MENU_CODE_KEY)); + List<Menu> menus = getMenus((menuCodes.size() > 0 ? menuCodes : stringMenus), userMenus); + List<RoleMenu> roleMenus = new ArrayList<>(); + //鍒涘缓鎵�鏈夎彍鍗曡鑹插叧鑱斿璞� + menus.forEach(menu -> { + roleMenus.add(new RoleMenu(menu.getId(),role.getId())); }); - return true; + roleMenuService.saveBatch(roleMenus); + } + + /** + * 鍒涘缓榛樿閮ㄩ棬 + * @param tenantId + * @param tenant + */ + private Dept generateDept(String tenantId,Tenant tenant){ + Dept dept = new Dept(); + dept.setTenantId(tenantId); + dept.setParentId(BladeConstant.TOP_PARENT_ID); + dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID)); + dept.setDeptName(tenant.getTenantName()); + dept.setFullName(tenant.getTenantName()); + dept.setDeptCategory(1); + dept.setSort(2); + dept.setIsDeleted(BladeConstant.DB_NOT_DELETED); + return dept; } private String getTenantId(List<String> codes) { @@ -248,6 +339,5 @@ recursionDictBiz(tenantId, oldSubParentId, newSubParentId, dictBizs); }); } - } -- Gitblit v1.9.3