diff --git a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java index f60c8b21..c7ed3297 100644 --- a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java +++ b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java @@ -23,6 +23,8 @@ import org.springblade.system.user.entity.User; import org.springblade.system.user.entity.UserInfo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; /** @@ -38,6 +40,7 @@ public interface IUserClient { String API_PREFIX = "/client"; String USER_INFO = API_PREFIX + "/user-info"; String USER_INFO_BY_ID = API_PREFIX + "/user-info-by-id"; + String SAVE_USER = API_PREFIX + "/save-user"; /** * 获取用户信息 @@ -52,10 +55,19 @@ public interface IUserClient { * 获取用户信息 * * @param tenantId 租户ID - * @param account 账号 + * @param account 账号 * @return */ @GetMapping(USER_INFO) R userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account); + /** + * 新建用户 + * + * @param user 用户实体 + * @return + */ + @PostMapping(SAVE_USER) + R saveUser(@RequestBody User user); + } diff --git a/blade-service/blade-system/pom.xml b/blade-service/blade-system/pom.xml index bef15dc5..e40f4dc4 100644 --- a/blade-service/blade-system/pom.xml +++ b/blade-service/blade-system/pom.xml @@ -28,6 +28,11 @@ blade-system-api ${bladex.project.version} + + org.springblade + blade-user-api + ${bladex.project.version} + diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java index 572f95e6..cdef08c0 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java @@ -17,7 +17,6 @@ package org.springblade.system.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.exceptions.ApiException; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; @@ -89,7 +88,7 @@ public class DeptServiceImpl extends ServiceImpl implements ID public boolean removeDept(String ids) { Integer cnt = baseMapper.selectCount(Wrappers.query().lambda().in(Dept::getParentId, Func.toLongList(ids))); if (cnt > 0) { - throw new ApiException("请先删除子节点!"); + throw new ServiceException("请先删除子节点!"); } return removeByIds(Func.toLongList(ids)); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java index 2c348aaa..4581650e 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java @@ -19,9 +19,9 @@ package org.springblade.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.exceptions.ApiException; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.common.constant.CommonConstant; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.constant.BladeConstant; @@ -75,7 +75,7 @@ public class DictBizServiceImpl extends ServiceImpl impl LambdaQueryWrapper lqw = Wrappers.query().lambda().eq(DictBiz::getCode, dict.getCode()).eq(DictBiz::getDictKey, dict.getDictKey()); Integer cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBiz::getId, dict.getId())); if (cnt > 0) { - throw new ApiException("当前字典键值已存在!"); + throw new ServiceException("当前字典键值已存在!"); } if (Func.isEmpty(dict.getParentId())) { dict.setParentId(BladeConstant.TOP_PARENT_ID); @@ -88,7 +88,7 @@ public class DictBizServiceImpl extends ServiceImpl impl public boolean removeDict(String ids) { Integer cnt = baseMapper.selectCount(Wrappers.query().lambda().in(DictBiz::getParentId, Func.toLongList(ids))); if (cnt > 0) { - throw new ApiException("请先删除子节点!"); + throw new ServiceException("请先删除子节点!"); } return removeByIds(Func.toLongList(ids)); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java index 8c079384..6ee9a630 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java @@ -19,9 +19,9 @@ package org.springblade.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.exceptions.ApiException; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.common.constant.CommonConstant; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.constant.BladeConstant; @@ -81,7 +81,7 @@ public class DictServiceImpl extends ServiceImpl implements ID LambdaQueryWrapper lqw = Wrappers.query().lambda().eq(Dict::getCode, dict.getCode()).eq(Dict::getDictKey, dict.getDictKey()); Integer cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(Dict::getId, dict.getId())); if (cnt > 0) { - throw new ApiException("当前字典键值已存在!"); + throw new ServiceException("当前字典键值已存在!"); } if (Func.isEmpty(dict.getParentId())) { dict.setParentId(BladeConstant.TOP_PARENT_ID); @@ -94,7 +94,7 @@ public class DictServiceImpl extends ServiceImpl implements ID public boolean removeDict(String ids) { Integer cnt = baseMapper.selectCount(Wrappers.query().lambda().in(Dict::getParentId, Func.toLongList(ids))); if (cnt > 0) { - throw new ApiException("请先删除子节点!"); + throw new ServiceException("请先删除子节点!"); } return removeByIds(Func.toLongList(ids)); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java index 6c6193ef..46faf07a 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java @@ -17,9 +17,9 @@ package org.springblade.system.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.exceptions.ApiException; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.SecureUtil; import org.springblade.core.tool.constant.BladeConstant; @@ -175,7 +175,7 @@ public class MenuServiceImpl extends ServiceImpl implements IM public boolean removeMenu(String ids) { Integer cnt = baseMapper.selectCount(Wrappers.query().lambda().in(Menu::getParentId, Func.toLongList(ids))); if (cnt > 0) { - throw new ApiException("请先删除子节点!"); + throw new ServiceException("请先删除子节点!"); } return removeByIds(Func.toLongList(ids)); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java index 893efabb..114b1a60 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java @@ -19,21 +19,25 @@ 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.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tenant.TenantId; +import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.BladeConstant; import org.springblade.core.tool.utils.Func; -import org.springblade.system.entity.Dept; -import org.springblade.system.entity.Role; -import org.springblade.system.entity.Tenant; +import org.springblade.system.entity.*; import org.springblade.system.mapper.DeptMapper; +import org.springblade.system.mapper.MenuMapper; import org.springblade.system.mapper.RoleMapper; import org.springblade.system.mapper.TenantMapper; +import org.springblade.system.service.IRoleMenuService; 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.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -47,7 +51,17 @@ public class TenantServiceImpl extends BaseServiceImpl imp private final TenantId tenantId; private final RoleMapper roleMapper; + private final MenuMapper menuMapper; private final DeptMapper deptMapper; + private final IRoleMenuService roleMenuService; + private final IUserClient userClient; + + /** + * 新建默认租户角色所分配的菜单主节点 + */ + private final List menuCodes = Arrays.asList( + "desk", "flow", "work", "monitor", "resource", "role", "user", "dept", "dictbiz", "topmenu", "param" + ); @Override public IPage selectTenantPage(IPage page, Tenant tenant) { @@ -77,6 +91,17 @@ public class TenantServiceImpl extends BaseServiceImpl imp role.setSort(2); role.setIsDeleted(0); roleMapper.insert(role); + // 新建租户对应的角色菜单权限 + LinkedList userMenus = new LinkedList<>(); + List menus = getMenus(menuCodes, userMenus); + List 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); @@ -88,6 +113,22 @@ public class TenantServiceImpl extends BaseServiceImpl imp dept.setSort(2); dept.setIsDeleted(0); deptMapper.insert(dept); + // 新建租户对应的默认管理用户 + User user = new User(); + user.setTenantId(tenantId); + user.setName("admin"); + user.setRealName("admin"); + user.setAccount("admin"); + user.setPassword("admin"); + user.setRoleId(String.valueOf(role.getId())); + user.setDeptId(String.valueOf(dept.getId())); + user.setBirthday(new Date()); + user.setSex(1); + user.setIsDeleted(0); + R result = userClient.saveUser(user); + if (!result.isSuccess()) { + throw new ServiceException(result.getMsg()); + } } return super.saveOrUpdate(tenant); } @@ -100,4 +141,19 @@ public class TenantServiceImpl extends BaseServiceImpl imp return code; } + private List getMenus(List codes, LinkedList menus) { + codes.forEach(code -> { + Menu menu = menuMapper.selectOne(Wrappers.query().lambda().eq(Menu::getCode, code).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED)); + menus.add(menu); + recursion(menu.getId(), menus); + }); + return menus; + } + + private void recursion(Long parentId, LinkedList menus) { + List menuList = menuMapper.selectList(Wrappers.query().lambda().eq(Menu::getParentId, parentId).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED)); + menus.addAll(menuList); + menuList.forEach(menu -> recursion(menu.getId(), menus)); + } + } diff --git a/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java b/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java index d05503a5..43ff977b 100644 --- a/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java +++ b/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java @@ -22,6 +22,8 @@ import org.springblade.system.user.entity.User; import org.springblade.system.user.entity.UserInfo; import org.springblade.system.user.service.IUserService; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; /** @@ -33,7 +35,7 @@ import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor public class UserClient implements IUserClient { - IUserService service; + private IUserService service; @Override @GetMapping(USER_INFO_BY_ID) @@ -47,4 +49,10 @@ public class UserClient implements IUserClient { return R.data(service.userInfo(tenantId, account)); } + @Override + @PostMapping(SAVE_USER) + public R saveUser(@RequestBody User user) { + return R.data(service.submit(user)); + } + } diff --git a/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java index 12ebb9ef..d015ca77 100644 --- a/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java +++ b/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java @@ -19,7 +19,6 @@ package org.springblade.system.user.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.exceptions.ApiException; import lombok.AllArgsConstructor; import org.springblade.common.constant.CommonConstant; import org.springblade.core.log.exception.ServiceException; @@ -69,7 +68,7 @@ public class UserServiceImpl extends BaseServiceImpl implement } Integer userCount = baseMapper.selectCount(Wrappers.query().lambda().eq(User::getTenantId, Func.toStr(tenantId, BladeConstant.ADMIN_TENANT_ID)).eq(User::getAccount, user.getAccount())); if (userCount > 0 && Func.isEmpty(user.getId())) { - throw new ApiException("当前用户已存在!"); + throw new ServiceException("当前用户已存在!"); } return save(user) && submitUserDept(user); } @@ -142,7 +141,7 @@ public class UserServiceImpl extends BaseServiceImpl implement @Override public boolean removeUser(String userIds) { if (Func.contains(Func.toLongArray(userIds), SecureUtil.getUserId())) { - throw new ApiException("不能删除本账号!"); + throw new ServiceException("不能删除本账号!"); } return deleteLogic(Func.toLongList(userIds)); }