Merge branch 'master' of http://122.51.230.86:3000/dianliang/lanan-system
This commit is contained in:
commit
7eaeb811eb
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.company.controller.admin;
|
package cn.iocoder.yudao.module.company.controller.admin;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import cn.iocoder.yudao.module.company.vo.CompanyReqVO;
|
import cn.iocoder.yudao.module.company.vo.CompanyReqVO;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
@ -25,6 +27,7 @@ import cn.iocoder.yudao.module.company.service.CompanyService;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,7 +72,7 @@ public class CompanyController {
|
|||||||
@Operation(summary = "创建企业信息表(每个租户的下属企业信息)")
|
@Operation(summary = "创建企业信息表(每个租户的下属企业信息)")
|
||||||
@PreAuthorize("@ss.hasPermission('base:company:create')")
|
@PreAuthorize("@ss.hasPermission('base:company:create')")
|
||||||
public CommonResult<String> createCompany(@RequestBody CompanyRespVO companyRespVO) {
|
public CommonResult<String> createCompany(@RequestBody CompanyRespVO companyRespVO) {
|
||||||
companyService.save(companyRespVO);
|
companyService.saveDataObj(companyRespVO);
|
||||||
return CommonResult.ok();
|
return CommonResult.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,8 +85,8 @@ public class CompanyController {
|
|||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新企业信息表(每个租户的下属企业信息)")
|
@Operation(summary = "更新企业信息表(每个租户的下属企业信息)")
|
||||||
@PreAuthorize("@ss.hasPermission('base:company:update')")
|
@PreAuthorize("@ss.hasPermission('base:company:update')")
|
||||||
public CommonResult<Boolean> updateCompany(@RequestBody Company company) {
|
public CommonResult<Boolean> updateCompany(@RequestBody CompanyRespVO company) {
|
||||||
companyService.updateById(company);
|
companyService.updateDataObj(company);
|
||||||
return CommonResult.ok();
|
return CommonResult.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +101,7 @@ public class CompanyController {
|
|||||||
@Parameter(name = "id", description = "编号", required = true)
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
@PreAuthorize("@ss.hasPermission('base:company:delete')")
|
@PreAuthorize("@ss.hasPermission('base:company:delete')")
|
||||||
public CommonResult<Boolean> deleteCompany(@RequestParam("id") String id) {
|
public CommonResult<Boolean> deleteCompany(@RequestParam("id") String id) {
|
||||||
companyService.removeById(id);
|
companyService.removeDataObj(id);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +117,11 @@ public class CompanyController {
|
|||||||
@PreAuthorize("@ss.hasPermission('base:company:query')")
|
@PreAuthorize("@ss.hasPermission('base:company:query')")
|
||||||
public CommonResult<CompanyRespVO> getCompany(@RequestParam("id") String id) {
|
public CommonResult<CompanyRespVO> getCompany(@RequestParam("id") String id) {
|
||||||
Company company = companyService.getById(id);
|
Company company = companyService.getById(id);
|
||||||
return success(BeanUtils.toBean(company, CompanyRespVO.class));
|
CompanyRespVO companyRespVO = BeanUtils.toBean(company, CompanyRespVO.class);
|
||||||
|
if(StringUtils.isNotEmpty(companyRespVO.getServiceCodes())){
|
||||||
|
companyRespVO.setServiceCodeArray(Arrays.asList(company.getServiceCodes().split(StrUtil.COMMA)));
|
||||||
|
}
|
||||||
|
return success(companyRespVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,7 +64,7 @@ public class Company extends TenantBaseDO {
|
|||||||
private String business ;
|
private String business ;
|
||||||
/** 管理员登录账号 */
|
/** 管理员登录账号 */
|
||||||
private String loginAccount ;
|
private String loginAccount ;
|
||||||
/** 关联的菜单编号(实际就是这个企业的用户登录后有哪些菜单权限) */
|
/** 关联的服务编号(多个以英文逗号隔开)(实际就是这个企业的用户登录后有哪些系统权限) */
|
||||||
private String menuIds ;
|
private String serviceCodes ;
|
||||||
|
|
||||||
}
|
}
|
@ -28,4 +28,20 @@ public interface CompanyService extends IService<Company> {
|
|||||||
* @param companyRespVO 企业对象
|
* @param companyRespVO 企业对象
|
||||||
**/
|
**/
|
||||||
void saveDataObj(CompanyRespVO companyRespVO);
|
void saveDataObj(CompanyRespVO companyRespVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新企业信息
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 9:56 2024/8/2
|
||||||
|
* @param companyRespVO 企业对象
|
||||||
|
**/
|
||||||
|
void updateDataObj(CompanyRespVO companyRespVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除企业
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 16:33 2024/8/3
|
||||||
|
* @param id 企业id
|
||||||
|
**/
|
||||||
|
void removeDataObj(String id);
|
||||||
}
|
}
|
@ -1,6 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.company.service.impl;
|
package cn.iocoder.yudao.module.company.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
|
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
||||||
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||||
import cn.iocoder.yudao.module.company.entity.Company;
|
import cn.iocoder.yudao.module.company.entity.Company;
|
||||||
import cn.iocoder.yudao.module.company.vo.CompanyRespVO;
|
import cn.iocoder.yudao.module.company.vo.CompanyRespVO;
|
||||||
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
||||||
@ -9,8 +13,11 @@ import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
|
|||||||
import cn.iocoder.yudao.module.system.api.permission.RoleApi;
|
import cn.iocoder.yudao.module.system.api.permission.RoleApi;
|
||||||
import cn.iocoder.yudao.module.system.api.permission.dto.RoleReqDTO;
|
import cn.iocoder.yudao.module.system.api.permission.dto.RoleReqDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
|
||||||
import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
|
import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum;
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import cn.iocoder.yudao.module.company.vo.CompanyReqVO;
|
import cn.iocoder.yudao.module.company.vo.CompanyReqVO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -24,6 +31,14 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||||
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
|
||||||
import static java.util.Collections.singleton;
|
import static java.util.Collections.singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,43 +80,88 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
|
|||||||
* @date 9:56 2024/8/2
|
* @date 9:56 2024/8/2
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换
|
||||||
public void saveDataObj(CompanyRespVO companyRespVO) {
|
public void saveDataObj(CompanyRespVO companyRespVO) {
|
||||||
/*1.保存企业信息*/
|
try {
|
||||||
this.save(companyRespVO);
|
/*1.保存企业信息*/
|
||||||
/*2.新增企业管理员角色和用户信息*/
|
this.save(companyRespVO);
|
||||||
|
/*2.新增企业部门信息*/
|
||||||
/*3.新增企业部门信息*/
|
DeptRespDTO deptRespDTO = new DeptRespDTO();
|
||||||
DeptRespDTO deptRespDTO = new DeptRespDTO();
|
deptRespDTO.setName(companyRespVO.getCorpName());
|
||||||
deptRespDTO.setName(companyRespVO.getCorpName());
|
deptRespDTO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
deptRespDTO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
//上级部门为本租户顶级部门
|
||||||
// deptRespDTO.setLeaderUserId(userId);
|
DeptRespDTO parentDept = deptApi.getDeptByParentId(0L);
|
||||||
deptApi.saveDept(deptRespDTO);
|
deptRespDTO.setParentId(parentDept.getId());
|
||||||
/*3.更新企业管理员所属部门信息*/
|
Long deptId = deptApi.saveDept(deptRespDTO);
|
||||||
|
/*3.新增企业管理员用户信息并配置角色*/
|
||||||
|
UserDTO userDTO = new UserDTO();
|
||||||
|
userDTO.setUsername(companyRespVO.getLoginAccount());
|
||||||
|
userDTO.setNickname(companyRespVO.getContactName());
|
||||||
|
userDTO.setDeptId(deptId);
|
||||||
|
userDTO.setPassword(companyRespVO.getPassword());
|
||||||
|
userDTO.setMobile(companyRespVO.getMobilePhone());
|
||||||
|
Long userId = adminUserApi.createUser(userDTO);
|
||||||
|
Set<String> roleCodes = new HashSet<>(Arrays.asList(companyRespVO.getServiceCodes().split(StrUtil.COMMA)));
|
||||||
|
permissionApi.assignUserRole(userId, roleCodes);
|
||||||
|
} catch (ServiceException e) {
|
||||||
|
throw exception(new ErrorCode(e.getCode(), e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新企业信息
|
||||||
|
*
|
||||||
|
* @param companyRespVO 企业对象
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 9:56 2024/8/2
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
@DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换
|
||||||
|
public void updateDataObj(CompanyRespVO companyRespVO) {
|
||||||
|
try {
|
||||||
|
//查出原有数据
|
||||||
|
Company oldCompany = this.getById(companyRespVO.getId());
|
||||||
|
if(!companyRespVO.getServiceCodes().equals(oldCompany.getServiceCodes())){
|
||||||
|
//服务发生变化,变更企业管理员的角色权限
|
||||||
|
Set<String> roleCodes = new HashSet<>(Arrays.asList(companyRespVO.getServiceCodes().split(StrUtil.COMMA)));
|
||||||
|
//根据企业管理员登录账户查出userId
|
||||||
|
AdminUserRespDTO adminUserRespDTO = adminUserApi.getUserByUsername(oldCompany.getLoginAccount());
|
||||||
|
permissionApi.assignUserRole(adminUserRespDTO.getId(),roleCodes);
|
||||||
|
}
|
||||||
|
//正常更新数据
|
||||||
|
this.updateById(companyRespVO);
|
||||||
|
}catch (ServiceException e) {
|
||||||
|
throw exception(new ErrorCode(e.getCode(), e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除企业
|
||||||
|
*
|
||||||
|
* @param id 企业id
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 16:33 2024/8/3
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
@DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换
|
||||||
|
public void removeDataObj(String id) {
|
||||||
|
try {
|
||||||
|
Company company = this.getById(id);
|
||||||
|
/*1.查出本租户下与本企业名称相同的二级部门,并取出下级所有部门 */
|
||||||
|
DeptRespDTO parentDept = deptApi.getDeptByParentId(0L);
|
||||||
|
DeptRespDTO thisDept = deptApi.getDeptByParentIdAndName(parentDept.getId(),company.getCorpName());
|
||||||
|
List<DeptRespDTO> allChildDeptList = deptApi.getChildDeptList(thisDept.getId());
|
||||||
|
allChildDeptList.add(thisDept);
|
||||||
|
/*2.删除所有部门的用户和部门---这里挨个删除,为了记录日志和级联删除对应的权限 */
|
||||||
|
Set<Long> deptIds = convertSet(allChildDeptList, DeptRespDTO::getId);
|
||||||
|
List<AdminUserRespDTO> userRespDTOList = adminUserApi.getUserListByDeptIds(deptIds);
|
||||||
|
userRespDTOList.forEach(user->adminUserApi.deleteUser(user.getId()));
|
||||||
|
deptApi.deleteDept(deptIds);
|
||||||
|
/*3.删除本企业 */
|
||||||
|
this.removeById(id);
|
||||||
|
}catch (ServiceException e) {
|
||||||
|
throw exception(new ErrorCode(e.getCode(), e.getMessage()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// private Long createUser(Long roleId, CompanyRespVO companyRespVO) {
|
|
||||||
// // 创建用户
|
|
||||||
// Long userId = adminUserApi.createUser(TenantConvert.INSTANCE.convert02(createReqVO));
|
|
||||||
// // 分配角色
|
|
||||||
// permissionService.assignUserRole(userId, singleton(roleId));
|
|
||||||
// return userId;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 创建企业时自动创建企业管理员角色
|
|
||||||
// * @author vinjor-M
|
|
||||||
// * @date 10:22 2024/8/2
|
|
||||||
// * @param companyRespVO 企业对象
|
|
||||||
// **/
|
|
||||||
// private Long createRole(CompanyRespVO companyRespVO) {
|
|
||||||
// // 创建角色
|
|
||||||
// RoleReqDTO reqVO = new RoleReqDTO();
|
|
||||||
// reqVO.setName(RoleCodeEnum.COMPANY_ADMIN.getName()).setCode(RoleCodeEnum.COMPANY_ADMIN.getCode())
|
|
||||||
// .setSort(0).setRemark("系统自动生成");
|
|
||||||
// Long roleId = roleApi.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
|
||||||
// // 分配权限
|
|
||||||
// permissionApi.assignRoleMenu(roleId, companyRespVO.getMenuIds());
|
|
||||||
// return roleId;
|
|
||||||
// }
|
|
||||||
}
|
}
|
@ -6,18 +6,23 @@ import lombok.Data;
|
|||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企业返回结果vo
|
* 企业返回结果或提交vo
|
||||||
* @author vinjor-M
|
* @author vinjor-M
|
||||||
* @date 17:37 2024/7/31
|
* @date 17:37 2024/7/31
|
||||||
**/
|
**/
|
||||||
@Data
|
@Data
|
||||||
public class CompanyRespVO extends Company {
|
public class CompanyRespVO extends Company {
|
||||||
/**
|
/**
|
||||||
* 该企业分配的菜单权限
|
* 登录账户密码
|
||||||
*/
|
*/
|
||||||
String menuIds;
|
String password;
|
||||||
|
/**
|
||||||
|
* 登录账户密码
|
||||||
|
*/
|
||||||
|
List<String> serviceCodeArray;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package cn.iocoder.yudao.framework.common.config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通用常量配置类
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 14:14 2024/8/2
|
||||||
|
**/
|
||||||
|
public interface CommonStr {
|
||||||
|
/** 默认点亮科技租户 --1 */
|
||||||
|
Long TENANT_ID=1L;
|
||||||
|
}
|
@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 部门 API 接口
|
* 部门 API 接口
|
||||||
@ -21,6 +22,14 @@ public interface DeptApi {
|
|||||||
*/
|
*/
|
||||||
Long saveDept(DeptRespDTO deptRespDTO);
|
Long saveDept(DeptRespDTO deptRespDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除部门
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 17:17 2024/8/3
|
||||||
|
* @param ids 部门ids
|
||||||
|
**/
|
||||||
|
void deleteDept(Set<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得部门信息
|
* 获得部门信息
|
||||||
*
|
*
|
||||||
@ -29,6 +38,22 @@ public interface DeptApi {
|
|||||||
*/
|
*/
|
||||||
DeptRespDTO getDept(Long id);
|
DeptRespDTO getDept(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
DeptRespDTO getDeptByParentId(Long parentId);
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @param name 上级部门名称
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
DeptRespDTO getDeptByParentIdAndName(Long parentId,String name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得部门信息数组
|
* 获得部门信息数组
|
||||||
*
|
*
|
||||||
|
@ -46,4 +46,12 @@ public interface PermissionApi {
|
|||||||
*/
|
*/
|
||||||
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
|
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置用户角色
|
||||||
|
*
|
||||||
|
* @param userId 角色编号
|
||||||
|
* @param roleCodes 角色编号集合
|
||||||
|
*/
|
||||||
|
void assignUserRole(Long userId, Set<String> roleCodes);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.system.api.user;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -15,6 +17,22 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public interface AdminUserApi {
|
public interface AdminUserApi {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建用户
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 15:27 2024/8/3
|
||||||
|
* @param userDTO 用户DTO
|
||||||
|
* @return java.lang.Long
|
||||||
|
**/
|
||||||
|
Long createUser(UserDTO userDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除用户
|
||||||
|
*
|
||||||
|
* @param id 用户编号
|
||||||
|
*/
|
||||||
|
void deleteUser(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过用户 ID 查询用户
|
* 通过用户 ID 查询用户
|
||||||
*
|
*
|
||||||
@ -23,6 +41,14 @@ public interface AdminUserApi {
|
|||||||
*/
|
*/
|
||||||
AdminUserRespDTO getUser(Long id);
|
AdminUserRespDTO getUser(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过用户 登录账户 查询用户
|
||||||
|
*
|
||||||
|
* @param username 用户登录账户
|
||||||
|
* @return 用户对象信息
|
||||||
|
*/
|
||||||
|
AdminUserRespDTO getUserByUsername(String username);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过用户 ID 查询用户下属
|
* 通过用户 ID 查询用户下属
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.api.user.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class UserDTO {
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 用户账号
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门编号
|
||||||
|
*/
|
||||||
|
private Long deptId;
|
||||||
|
/**
|
||||||
|
* 用户手机号码
|
||||||
|
*/
|
||||||
|
private String mobile;
|
||||||
|
/**
|
||||||
|
* 用户密码
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
}
|
@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 部门 API 实现类
|
* 部门 API 实现类
|
||||||
@ -36,12 +37,49 @@ public class DeptApiImpl implements DeptApi {
|
|||||||
return deptService.createDept(deptSaveReqVO);
|
return deptService.createDept(deptSaveReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除部门
|
||||||
|
*
|
||||||
|
* @param ids 部门ids
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 17:17 2024/8/3
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
public void deleteDept(Set<Long> ids) {
|
||||||
|
deptService.deleteDept(ids);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeptRespDTO getDept(Long id) {
|
public DeptRespDTO getDept(Long id) {
|
||||||
DeptDO dept = deptService.getDept(id);
|
DeptDO dept = deptService.getDept(id);
|
||||||
return BeanUtils.toBean(dept, DeptRespDTO.class);
|
return BeanUtils.toBean(dept, DeptRespDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DeptRespDTO getDeptByParentId(Long parentId) {
|
||||||
|
DeptDO dept = deptService.getDeptByParentId(parentId);
|
||||||
|
return BeanUtils.toBean(dept, DeptRespDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @param name 上级部门名称
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DeptRespDTO getDeptByParentIdAndName(Long parentId, String name) {
|
||||||
|
DeptDO dept = deptService.getDeptByParentIdAndName(parentId,name);
|
||||||
|
return BeanUtils.toBean(dept, DeptRespDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DeptRespDTO> getDeptList(Collection<Long> ids) {
|
public List<DeptRespDTO> getDeptList(Collection<Long> ids) {
|
||||||
List<DeptDO> depts = deptService.getDeptList(ids);
|
List<DeptDO> depts = deptService.getDeptList(ids);
|
||||||
|
@ -39,4 +39,15 @@ public class PermissionApiImpl implements PermissionApi {
|
|||||||
return permissionService.getDeptDataPermission(userId);
|
return permissionService.getDeptDataPermission(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置用户角色
|
||||||
|
*
|
||||||
|
* @param userId 角色编号
|
||||||
|
* @param roleCodes 角色编号集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void assignUserRole(Long userId, Set<String> roleCodes) {
|
||||||
|
permissionService.assignUserRoleByCodes(userId, roleCodes);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||||
@ -31,12 +33,48 @@ public class AdminUserApiImpl implements AdminUserApi {
|
|||||||
@Resource
|
@Resource
|
||||||
private DeptService deptService;
|
private DeptService deptService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建用户
|
||||||
|
*
|
||||||
|
* @param userDTO 用户DTO
|
||||||
|
* @return java.lang.Long
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 15:27 2024/8/3
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
public Long createUser(UserDTO userDTO) {
|
||||||
|
UserSaveReqVO userSaveReqVO = BeanUtils.toBean(userDTO, UserSaveReqVO.class);
|
||||||
|
return userService.createUser(userSaveReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除用户
|
||||||
|
*
|
||||||
|
* @param id 用户编号
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void deleteUser(Long id) {
|
||||||
|
userService.deleteUser(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AdminUserRespDTO getUser(Long id) {
|
public AdminUserRespDTO getUser(Long id) {
|
||||||
AdminUserDO user = userService.getUser(id);
|
AdminUserDO user = userService.getUser(id);
|
||||||
return BeanUtils.toBean(user, AdminUserRespDTO.class);
|
return BeanUtils.toBean(user, AdminUserRespDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过用户 登录账户 查询用户
|
||||||
|
*
|
||||||
|
* @param username 用户登录账户
|
||||||
|
* @return 用户对象信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public AdminUserRespDTO getUserByUsername(String username) {
|
||||||
|
AdminUserDO user = userService.getUserByUsername(username);
|
||||||
|
return BeanUtils.toBean(user, AdminUserRespDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AdminUserRespDTO> getUserListBySubordinate(Long id) {
|
public List<AdminUserRespDTO> getUserListBySubordinate(Long id) {
|
||||||
// 1.1 获取用户负责的部门
|
// 1.1 获取用户负责的部门
|
||||||
|
@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 租户 Response VO")
|
@Schema(description = "管理后台 - 租户 Response VO")
|
||||||
@Data
|
@Data
|
||||||
@ -40,7 +41,7 @@ public class TenantRespVO {
|
|||||||
private String website;
|
private String website;
|
||||||
|
|
||||||
@Schema(description = "租户套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
@Schema(description = "租户套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
private Long packageId;
|
private Set<String> packageId;
|
||||||
|
|
||||||
@Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
private LocalDateTime expireTime;
|
private LocalDateTime expireTime;
|
||||||
|
@ -11,6 +11,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
import javax.validation.constraints.Pattern;
|
import javax.validation.constraints.Pattern;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 租户创建/修改 Request VO")
|
@Schema(description = "管理后台 - 租户创建/修改 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@ -39,7 +40,7 @@ public class TenantSaveReqVO {
|
|||||||
|
|
||||||
@Schema(description = "租户套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
@Schema(description = "租户套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
@NotNull(message = "租户套餐编号不能为空")
|
@NotNull(message = "租户套餐编号不能为空")
|
||||||
private Long packageId;
|
private Set<String> packageId;
|
||||||
|
|
||||||
@Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
@NotNull(message = "过期时间不能为空")
|
@NotNull(message = "过期时间不能为空")
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.dal.dataobject.service;
|
package cn.iocoder.yudao.module.system.dal.dataobject.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -12,14 +13,14 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
|||||||
*
|
*
|
||||||
* @author 后台管理员
|
* @author 后台管理员
|
||||||
*/
|
*/
|
||||||
@TableName("system_service_package")
|
@TableName(value = "system_service_package", autoResultMap = true)
|
||||||
@KeySequence("system_service_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
@KeySequence("system_service_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
public class ServicePackageDO extends BaseDO {
|
public class ServicePackageDO extends BaseDO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,6 +43,7 @@ public class ServicePackageDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 关联的菜单编号
|
* 关联的菜单编号
|
||||||
*/
|
*/
|
||||||
private String menuIds;
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
|
private Set<Long> menuIds;
|
||||||
|
|
||||||
}
|
}
|
@ -4,10 +4,13 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 租户 DO
|
* 租户 DO
|
||||||
@ -67,7 +70,8 @@ public class TenantDO extends BaseDO {
|
|||||||
* 关联 {@link TenantPackageDO#getId()}
|
* 关联 {@link TenantPackageDO#getId()}
|
||||||
* 特殊逻辑:系统内置租户,不使用套餐,暂时使用 {@link #PACKAGE_ID_SYSTEM} 标识
|
* 特殊逻辑:系统内置租户,不使用套餐,暂时使用 {@link #PACKAGE_ID_SYSTEM} 标识
|
||||||
*/
|
*/
|
||||||
private Long packageId;
|
@TableField(typeHandler =JacksonTypeHandler.class)
|
||||||
|
private Set<String> packageId;
|
||||||
/**
|
/**
|
||||||
* 过期时间
|
* 过期时间
|
||||||
*/
|
*/
|
||||||
|
@ -22,6 +22,10 @@ public interface DeptMapper extends BaseMapperX<DeptDO> {
|
|||||||
return selectOne(DeptDO::getParentId, parentId, DeptDO::getName, name);
|
return selectOne(DeptDO::getParentId, parentId, DeptDO::getName, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default DeptDO selectByParentId(Long parentId) {
|
||||||
|
return selectOne(DeptDO::getParentId, parentId);
|
||||||
|
}
|
||||||
|
|
||||||
default Long selectCountByParentId(Long parentId) {
|
default Long selectCountByParentId(Long parentId) {
|
||||||
return selectCount(DeptDO::getParentId, parentId);
|
return selectCount(DeptDO::getParentId, parentId);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.dal.mysql.permission;
|
package cn.iocoder.yudao.module.system.dal.mysql.permission;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.config.CommonStr;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
@ -36,4 +37,11 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
|
|||||||
return selectList(RoleDO::getStatus, statuses);
|
return selectList(RoleDO::getStatus, statuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default List<RoleDO> selectListByCodes(@Nullable Collection<String> codes) {
|
||||||
|
return selectList(new LambdaQueryWrapperX<RoleDO>().in(RoleDO::getCode, codes).eq(RoleDO::getTenantId, CommonStr.TENANT_ID));
|
||||||
|
}
|
||||||
|
default List<RoleDO> selectListByCodesTenant(@Nullable Collection<String> codes) {
|
||||||
|
return selectList(new LambdaQueryWrapperX<RoleDO>().in(RoleDO::getCode, codes));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,14 @@ public interface DeptService {
|
|||||||
*/
|
*/
|
||||||
void deleteDept(Long id);
|
void deleteDept(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除部门
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 17:16 2024/8/3
|
||||||
|
* @param ids 部门ids
|
||||||
|
**/
|
||||||
|
void deleteDept(Set<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得部门信息
|
* 获得部门信息
|
||||||
*
|
*
|
||||||
@ -46,6 +54,21 @@ public interface DeptService {
|
|||||||
* @return 部门信息
|
* @return 部门信息
|
||||||
*/
|
*/
|
||||||
DeptDO getDept(Long id);
|
DeptDO getDept(Long id);
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
DeptDO getDeptByParentId(Long parentId);
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @param name 部门名称
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
DeptDO getDeptByParentIdAndName(Long parentId,String name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得部门信息数组
|
* 获得部门信息数组
|
||||||
|
@ -90,6 +90,20 @@ public class DeptServiceImpl implements DeptService {
|
|||||||
deptMapper.deleteById(id);
|
deptMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除部门
|
||||||
|
*
|
||||||
|
* @param ids 部门ids
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 17:16 2024/8/3
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
@CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
|
||||||
|
allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存
|
||||||
|
public void deleteDept(Set<Long> ids) {
|
||||||
|
deptMapper.deleteByIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void validateDeptExists(Long id) {
|
void validateDeptExists(Long id) {
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
@ -156,6 +170,30 @@ public class DeptServiceImpl implements DeptService {
|
|||||||
return deptMapper.selectById(id);
|
return deptMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DeptDO getDeptByParentId(Long parentId) {
|
||||||
|
return deptMapper.selectByParentId(parentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得部门信息
|
||||||
|
*
|
||||||
|
* @param parentId 上级部门编号
|
||||||
|
* @param name 部门名称
|
||||||
|
* @return 部门信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DeptDO getDeptByParentIdAndName(Long parentId, String name) {
|
||||||
|
return deptMapper.selectByParentIdAndName(parentId, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DeptDO> getDeptList(Collection<Long> ids) {
|
public List<DeptDO> getDeptList(Collection<Long> ids) {
|
||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
|
@ -63,6 +63,7 @@ public interface PermissionService {
|
|||||||
* @param roleId 角色编号
|
* @param roleId 角色编号
|
||||||
* @return 菜单编号集合
|
* @return 菜单编号集合
|
||||||
*/
|
*/
|
||||||
|
|
||||||
default Set<Long> getRoleMenuListByRoleId(Long roleId) {
|
default Set<Long> getRoleMenuListByRoleId(Long roleId) {
|
||||||
return getRoleMenuListByRoleId(singleton(roleId));
|
return getRoleMenuListByRoleId(singleton(roleId));
|
||||||
}
|
}
|
||||||
@ -75,6 +76,14 @@ public interface PermissionService {
|
|||||||
*/
|
*/
|
||||||
Set<Long> getRoleMenuListByRoleId(Collection<Long> roleIds);
|
Set<Long> getRoleMenuListByRoleId(Collection<Long> roleIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得角色们拥有的菜单编号集合----自定义
|
||||||
|
*
|
||||||
|
* @param roleId 角色编号
|
||||||
|
* @return 菜单编号集合
|
||||||
|
*/
|
||||||
|
Set<Long> getRoleMenuListByRoleIdCus(Long roleId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得拥有指定菜单的角色编号数组,从缓存中获取
|
* 获得拥有指定菜单的角色编号数组,从缓存中获取
|
||||||
*
|
*
|
||||||
@ -93,6 +102,15 @@ public interface PermissionService {
|
|||||||
*/
|
*/
|
||||||
void assignUserRole(Long userId, Set<Long> roleIds);
|
void assignUserRole(Long userId, Set<Long> roleIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置用户角色-通过角色code
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 15:31 2024/8/3
|
||||||
|
* @param userId 用户id
|
||||||
|
* @param roleCodes 角色code 集合
|
||||||
|
**/
|
||||||
|
void assignUserRoleByCodes(Long userId, Set<String> roleCodes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理用户删除时,删除关联授权数据
|
* 处理用户删除时,删除关联授权数据
|
||||||
*
|
*
|
||||||
|
@ -7,6 +7,7 @@ import cn.hutool.extra.spring.SpringUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
||||||
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
|
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
||||||
@ -35,6 +36,7 @@ import java.util.function.Supplier;
|
|||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||||
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
|
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
|
||||||
|
import static javafx.scene.input.KeyCode.H;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限 Service 实现类
|
* 权限 Service 实现类
|
||||||
@ -190,6 +192,12 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
return convertSet(roleMenuMapper.selectListByRoleId(roleIds), RoleMenuDO::getMenuId);
|
return convertSet(roleMenuMapper.selectListByRoleId(roleIds), RoleMenuDO::getMenuId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@TenantIgnore
|
||||||
|
public Set<Long> getRoleMenuListByRoleIdCus(Long roleId) {
|
||||||
|
return convertSet(roleMenuMapper.selectListByRoleId(roleId), RoleMenuDO::getMenuId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Cacheable(value = RedisKeyConstants.MENU_ROLE_ID_LIST, key = "#menuId")
|
@Cacheable(value = RedisKeyConstants.MENU_ROLE_ID_LIST, key = "#menuId")
|
||||||
public Set<Long> getMenuRoleIdListByMenuIdFromCache(Long menuId) {
|
public Set<Long> getMenuRoleIdListByMenuIdFromCache(Long menuId) {
|
||||||
@ -208,7 +216,7 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
// 计算新增和删除的角色编号
|
// 计算新增和删除的角色编号
|
||||||
Set<Long> roleIdList = CollUtil.emptyIfNull(roleIds);
|
Set<Long> roleIdList = CollUtil.emptyIfNull(roleIds);
|
||||||
Collection<Long> createRoleIds = CollUtil.subtract(roleIdList, dbRoleIds);
|
Collection<Long> createRoleIds = CollUtil.subtract(roleIdList, dbRoleIds);
|
||||||
Collection<Long> deleteMenuIds = CollUtil.subtract(dbRoleIds, roleIdList);
|
Collection<Long> deleteRoleIds = CollUtil.subtract(dbRoleIds, roleIdList);
|
||||||
// 执行新增和删除。对于已经授权的角色,不用做任何处理
|
// 执行新增和删除。对于已经授权的角色,不用做任何处理
|
||||||
if (!CollectionUtil.isEmpty(createRoleIds)) {
|
if (!CollectionUtil.isEmpty(createRoleIds)) {
|
||||||
userRoleMapper.insertBatch(CollectionUtils.convertList(createRoleIds, roleId -> {
|
userRoleMapper.insertBatch(CollectionUtils.convertList(createRoleIds, roleId -> {
|
||||||
@ -218,11 +226,28 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
return entity;
|
return entity;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (!CollectionUtil.isEmpty(deleteMenuIds)) {
|
if (!CollectionUtil.isEmpty(deleteRoleIds)) {
|
||||||
userRoleMapper.deleteListByUserIdAndRoleIdIds(userId, deleteMenuIds);
|
userRoleMapper.deleteListByUserIdAndRoleIdIds(userId, deleteRoleIds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置用户角色-通过角色code
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @param roleCodes 角色code 集合
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 15:31 2024/8/3
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
public void assignUserRoleByCodes(Long userId, Set<String> roleCodes) {
|
||||||
|
//根据角色code查出对应的角色列表
|
||||||
|
List<RoleDO> roleDOList = roleService.getRoleListByCodesTenant(roleCodes);
|
||||||
|
Set<Long> roleIds = new HashSet<>();
|
||||||
|
roleDOList.forEach(item->roleIds.add(item.getId()));
|
||||||
|
this.assignUserRole(userId,roleIds);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@CacheEvict(value = RedisKeyConstants.USER_ROLE_ID_LIST, key = "#userId")
|
@CacheEvict(value = RedisKeyConstants.USER_ROLE_ID_LIST, key = "#userId")
|
||||||
public void processUserDeleted(Long userId) {
|
public void processUserDeleted(Long userId) {
|
||||||
|
@ -40,6 +40,13 @@ public interface RoleService {
|
|||||||
*/
|
*/
|
||||||
void deleteRole(Long id);
|
void deleteRole(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除角色
|
||||||
|
*
|
||||||
|
* @param code 角色编号
|
||||||
|
*/
|
||||||
|
void deleteRole(String code);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置角色的数据权限
|
* 设置角色的数据权限
|
||||||
*
|
*
|
||||||
@ -73,6 +80,22 @@ public interface RoleService {
|
|||||||
*/
|
*/
|
||||||
List<RoleDO> getRoleList(Collection<Long> ids);
|
List<RoleDO> getRoleList(Collection<Long> ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得角色列表--仅限于点亮科技租户
|
||||||
|
*
|
||||||
|
* @param codes 角色code数组
|
||||||
|
* @return 角色列表
|
||||||
|
*/
|
||||||
|
List<RoleDO> getRoleListByCodes(Collection<String> codes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得角色列表--获取当前租户的
|
||||||
|
*
|
||||||
|
* @param codes 角色code数组
|
||||||
|
* @return 角色列表
|
||||||
|
*/
|
||||||
|
List<RoleDO> getRoleListByCodesTenant(Collection<String> codes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得角色数组,从缓存中
|
* 获得角色数组,从缓存中
|
||||||
*
|
*
|
||||||
|
@ -3,11 +3,13 @@ package cn.iocoder.yudao.module.system.service.permission;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
||||||
@ -121,6 +123,19 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
LogRecordContext.putVariable("role", role);
|
LogRecordContext.putVariable("role", role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除角色
|
||||||
|
*
|
||||||
|
* @param code 角色编号
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void deleteRole(String code) {
|
||||||
|
//根据角色code,查出对应角色id
|
||||||
|
RoleDO roleDO = roleMapper.selectByCode(code);
|
||||||
|
if(null!=roleDO){
|
||||||
|
this.deleteRole(roleDO.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 校验角色的唯一字段是否重复
|
* 校验角色的唯一字段是否重复
|
||||||
*
|
*
|
||||||
@ -202,6 +217,35 @@ public class RoleServiceImpl implements RoleService {
|
|||||||
return roleMapper.selectBatchIds(ids);
|
return roleMapper.selectBatchIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得角色列表--仅限于点亮科技租户
|
||||||
|
*
|
||||||
|
* @param codes 角色code数组
|
||||||
|
* @return 角色列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@TenantIgnore
|
||||||
|
public List<RoleDO> getRoleListByCodes(Collection<String> codes) {
|
||||||
|
if (CollectionUtil.isEmpty(codes)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return roleMapper.selectListByCodes(codes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得角色列表--获取当前租户的
|
||||||
|
*
|
||||||
|
* @param codes 角色code数组
|
||||||
|
* @return 角色列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<RoleDO> getRoleListByCodesTenant(Collection<String> codes) {
|
||||||
|
if (CollectionUtil.isEmpty(codes)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return roleMapper.selectListByCodesTenant(codes);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<RoleDO> getRoleListFromCache(Collection<Long> ids) {
|
public List<RoleDO> getRoleListFromCache(Collection<Long> ids) {
|
||||||
if (CollectionUtil.isEmpty(ids)) {
|
if (CollectionUtil.isEmpty(ids)) {
|
||||||
|
@ -60,7 +60,6 @@ public interface ServicePackageService {
|
|||||||
* @return 服务套餐
|
* @return 服务套餐
|
||||||
*/
|
*/
|
||||||
ServicePackageDO validServicePackage(String id);
|
ServicePackageDO validServicePackage(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得指定状态的服务套餐列表
|
* 获得指定状态的服务套餐列表
|
||||||
*
|
*
|
||||||
|
@ -1,7 +1,17 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.service;
|
package cn.iocoder.yudao.module.system.service.service;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.config.CommonStr;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
|
import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -30,16 +40,46 @@ public class ServicePackageServiceImpl implements ServicePackageService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ServicePackageMapper servicePackageMapper;
|
private ServicePackageMapper servicePackageMapper;
|
||||||
|
@Resource
|
||||||
|
private RoleService roleService;
|
||||||
|
@Resource
|
||||||
|
private TenantService tenantService;
|
||||||
|
@Resource
|
||||||
|
private PermissionService permissionService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createServicePackage(ServicePackageSaveReqVO createReqVO) {
|
public String createServicePackage(ServicePackageSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
ServicePackageDO servicePackage = BeanUtils.toBean(createReqVO, ServicePackageDO.class);
|
ServicePackageDO servicePackage = BeanUtils.toBean(createReqVO, ServicePackageDO.class);
|
||||||
servicePackageMapper.insert(servicePackage);
|
servicePackageMapper.insert(servicePackage);
|
||||||
|
//自动在点亮科技租户创建对应的角色并赋予权限
|
||||||
|
TenantUtils.execute(CommonStr.TENANT_ID, () -> {
|
||||||
|
//依据角色编码删除原有角色
|
||||||
|
roleService.deleteRole(createReqVO.getId());
|
||||||
|
// 创建新角色并赋予权限
|
||||||
|
createRole(createReqVO);
|
||||||
|
});
|
||||||
// 返回
|
// 返回
|
||||||
return servicePackage.getId();
|
return servicePackage.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动为新建的服务套餐创建角色并赋予权限
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 14:08 2024/8/2
|
||||||
|
* @param createReqVO 服务套餐对象
|
||||||
|
**/
|
||||||
|
private Long createRole(ServicePackageSaveReqVO createReqVO) {
|
||||||
|
// 创建角色
|
||||||
|
RoleSaveReqVO reqVO = new RoleSaveReqVO();
|
||||||
|
reqVO.setName(createReqVO.getName()+"业务管理员").setCode(createReqVO.getId())
|
||||||
|
.setSort(0).setRemark("系统自动生成");
|
||||||
|
Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
||||||
|
// 分配权限
|
||||||
|
permissionService.assignRoleMenu(roleId, createReqVO.getMenuIds());
|
||||||
|
return roleId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateServicePackage(ServicePackageSaveReqVO updateReqVO) {
|
public void updateServicePackage(ServicePackageSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
@ -57,8 +97,8 @@ public class ServicePackageServiceImpl implements ServicePackageService {
|
|||||||
public void deleteServicePackage(String id) {
|
public void deleteServicePackage(String id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateServicePackageExists(id);
|
validateServicePackageExists(id);
|
||||||
// 校验正在使用--TODO 后续完善
|
// 校验正在使用本服务的租户
|
||||||
// validateTenantUsed(id);
|
validServicePackageUsed(id);
|
||||||
// 删除
|
// 删除
|
||||||
servicePackageMapper.deleteById(id);
|
servicePackageMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
@ -69,6 +109,24 @@ public class ServicePackageServiceImpl implements ServicePackageService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validServicePackageUsed(String id) {
|
||||||
|
if (tenantService.getTenantCountByPackageId(id) > 0) {
|
||||||
|
throw exception(TENANT_PACKAGE_USED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServicePackageDO validServicePackage(String id) {
|
||||||
|
ServicePackageDO servicePackage = servicePackageMapper.selectById(id);
|
||||||
|
if (servicePackage == null) {
|
||||||
|
throw exception(SERVICE_PACKAGE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
if (servicePackage.getStatus().equals(CommonStatusEnum.DISABLE.getStatus())) {
|
||||||
|
throw exception(SERVICE_PACKAGE_DISABLE, servicePackage.getName());
|
||||||
|
}
|
||||||
|
return servicePackage;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ServicePackageDO getServicePackage(String id) {
|
public ServicePackageDO getServicePackage(String id) {
|
||||||
return servicePackageMapper.selectById(id);
|
return servicePackageMapper.selectById(id);
|
||||||
@ -79,19 +137,6 @@ public class ServicePackageServiceImpl implements ServicePackageService {
|
|||||||
return servicePackageMapper.selectPage(pageReqVO);
|
return servicePackageMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ServicePackageDO validServicePackage(String id) {
|
|
||||||
// ServicePackageDO tenantPackage = tenantPackageMapper.selectById(id);
|
|
||||||
// if (tenantPackage == null) {
|
|
||||||
// throw exception(TENANT_PACKAGE_NOT_EXISTS);
|
|
||||||
// }
|
|
||||||
// if (tenantPackage.getStatus().equals(CommonStatusEnum.DISABLE.getStatus())) {
|
|
||||||
// throw exception(TENANT_PACKAGE_DISABLE, tenantPackage.getName());
|
|
||||||
// }
|
|
||||||
// return tenantPackage;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ServicePackageDO> getServicePackageListByStatus(Integer status) {
|
public List<ServicePackageDO> getServicePackageListByStatus(Integer status) {
|
||||||
return servicePackageMapper.selectListByStatus(status);
|
return servicePackageMapper.selectListByStatus(status);
|
||||||
|
@ -89,6 +89,14 @@ public interface TenantService {
|
|||||||
*/
|
*/
|
||||||
Long getTenantCountByPackageId(Long packageId);
|
Long getTenantCountByPackageId(Long packageId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得使用指定套餐的租户数量
|
||||||
|
*
|
||||||
|
* @param packageId 租户套餐编号
|
||||||
|
* @return 租户数量
|
||||||
|
*/
|
||||||
|
Long getTenantCountByPackageId(String packageId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得使用指定套餐的租户数组
|
* 获得使用指定套餐的租户数组
|
||||||
*
|
*
|
||||||
|
@ -9,7 +9,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.tenant.config.TenantProperties;
|
import cn.iocoder.yudao.framework.tenant.config.TenantProperties;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
|
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
|
||||||
@ -20,6 +23,7 @@ import cn.iocoder.yudao.module.system.convert.tenant.TenantConvert;
|
|||||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.service.ServicePackageDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantMapper;
|
||||||
@ -29,10 +33,12 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
|||||||
import cn.iocoder.yudao.module.system.service.permission.MenuService;
|
import cn.iocoder.yudao.module.system.service.permission.MenuService;
|
||||||
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
||||||
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.service.ServicePackageService;
|
||||||
import cn.iocoder.yudao.module.system.service.tenant.handler.TenantInfoHandler;
|
import cn.iocoder.yudao.module.system.service.tenant.handler.TenantInfoHandler;
|
||||||
import cn.iocoder.yudao.module.system.service.tenant.handler.TenantMenuHandler;
|
import cn.iocoder.yudao.module.system.service.tenant.handler.TenantMenuHandler;
|
||||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
@ -40,9 +46,8 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Objects;
|
import java.util.stream.Collectors;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||||
@ -66,7 +71,8 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
private TenantMapper tenantMapper;
|
private TenantMapper tenantMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TenantPackageService tenantPackageService;
|
@Lazy // 延迟,避免循环依赖报错
|
||||||
|
private ServicePackageService servicePackageService;
|
||||||
@Resource
|
@Resource
|
||||||
@Lazy // 延迟,避免循环依赖报错
|
@Lazy // 延迟,避免循环依赖报错
|
||||||
private AdminUserService userService;
|
private AdminUserService userService;
|
||||||
@ -107,24 +113,50 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
// 校验租户域名是否重复
|
// 校验租户域名是否重复
|
||||||
validTenantWebsiteDuplicate(createReqVO.getWebsite(), null);
|
validTenantWebsiteDuplicate(createReqVO.getWebsite(), null);
|
||||||
// 校验套餐被禁用
|
// 校验套餐被禁用
|
||||||
TenantPackageDO tenantPackage = tenantPackageService.validTenantPackage(createReqVO.getPackageId());
|
Set<String> packageSet = createReqVO.getPackageId();
|
||||||
|
Set<Long> menuIds = new HashSet<>();
|
||||||
|
for (String packageId:packageSet){
|
||||||
|
ServicePackageDO servicePackageDO = servicePackageService.validServicePackage(packageId);
|
||||||
|
menuIds.addAll(servicePackageDO.getMenuIds());
|
||||||
|
}
|
||||||
// 创建租户
|
// 创建租户
|
||||||
TenantDO tenant = BeanUtils.toBean(createReqVO, TenantDO.class);
|
TenantDO tenant = BeanUtils.toBean(createReqVO, TenantDO.class);
|
||||||
tenantMapper.insert(tenant);
|
tenantMapper.insert(tenant);
|
||||||
// 创建租户的管理员
|
// 创建租户的管理员
|
||||||
TenantUtils.execute(tenant.getId(), () -> {
|
TenantUtils.execute(tenant.getId(), () -> {
|
||||||
// 创建角色
|
// 创建角色
|
||||||
Long roleId = createRole(tenantPackage);
|
Long roleId = createRole(menuIds);
|
||||||
// 创建用户,并分配角色
|
// 创建租户管理员用户,并分配角色
|
||||||
Long userId = createUser(roleId, createReqVO);
|
Long userId = createUser(roleId, createReqVO);
|
||||||
// 修改租户的管理员
|
// 修改租户的管理员
|
||||||
tenantMapper.updateById(new TenantDO().setId(tenant.getId()).setContactUserId(userId));
|
tenantMapper.updateById(new TenantDO().setId(tenant.getId()).setContactUserId(userId));
|
||||||
//创建顶级部门
|
//创建租户顶级部门
|
||||||
createDept(userId,createReqVO.getName(),createReqVO.getContactMobile());
|
Long deptId = createDept(userId,createReqVO.getName(),createReqVO.getContactMobile());
|
||||||
|
//拉取本租户配置的服务套餐对应的角色和权限,存入本租户对应信息
|
||||||
|
createServiceRole(createReqVO.getPackageId());
|
||||||
});
|
});
|
||||||
return tenant.getId();
|
return tenant.getId();
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 拉取本租户配置的服务套餐对应的角色和权限,存入本租户对应信息
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 16:39 2024/8/2
|
||||||
|
* @param serviceCodeSet 服务标识
|
||||||
|
**/
|
||||||
|
private void createServiceRole(Set<String> serviceCodeSet){
|
||||||
|
//先查出这些服务在点亮租户下对应角色(预先配置好的)
|
||||||
|
List<RoleDO> roleDOList = roleService.getRoleListByCodes(serviceCodeSet);
|
||||||
|
for (RoleDO roleDO:roleDOList){
|
||||||
|
Set<Long> menuIds = permissionService.getRoleMenuListByRoleIdCus(roleDO.getId());
|
||||||
|
// 创建角色
|
||||||
|
RoleSaveReqVO reqVO = new RoleSaveReqVO();
|
||||||
|
reqVO.setName(roleDO.getName()).setCode(roleDO.getCode())
|
||||||
|
.setSort(0).setRemark("系统自动生成");
|
||||||
|
Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
||||||
|
// 分配权限
|
||||||
|
permissionService.assignRoleMenu(roleId, menuIds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Long createDept(Long userId,String deptName,String phone){
|
private Long createDept(Long userId,String deptName,String phone){
|
||||||
DeptSaveReqVO deptSaveReqVO = new DeptSaveReqVO();
|
DeptSaveReqVO deptSaveReqVO = new DeptSaveReqVO();
|
||||||
@ -144,14 +176,14 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
return userId;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long createRole(TenantPackageDO tenantPackage) {
|
private Long createRole(Set<Long> menuIds) {
|
||||||
// 创建角色
|
// 创建角色
|
||||||
RoleSaveReqVO reqVO = new RoleSaveReqVO();
|
RoleSaveReqVO reqVO = new RoleSaveReqVO();
|
||||||
reqVO.setName(RoleCodeEnum.TENANT_ADMIN.getName()).setCode(RoleCodeEnum.TENANT_ADMIN.getCode())
|
reqVO.setName(RoleCodeEnum.TENANT_ADMIN.getName()).setCode(RoleCodeEnum.TENANT_ADMIN.getCode())
|
||||||
.setSort(0).setRemark("系统自动生成");
|
.setSort(0).setRemark("系统自动生成");
|
||||||
Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType());
|
||||||
// 分配权限
|
// 分配权限
|
||||||
permissionService.assignRoleMenu(roleId, tenantPackage.getMenuIds());
|
permissionService.assignRoleMenu(roleId, menuIds);
|
||||||
return roleId;
|
return roleId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,14 +197,19 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
// 校验租户域名是否重复
|
// 校验租户域名是否重复
|
||||||
validTenantWebsiteDuplicate(updateReqVO.getWebsite(), updateReqVO.getId());
|
validTenantWebsiteDuplicate(updateReqVO.getWebsite(), updateReqVO.getId());
|
||||||
// 校验套餐被禁用
|
// 校验套餐被禁用
|
||||||
TenantPackageDO tenantPackage = tenantPackageService.validTenantPackage(updateReqVO.getPackageId());
|
Set<String> packageSet = updateReqVO.getPackageId();
|
||||||
|
Set<Long> menuIds = new HashSet<>();
|
||||||
|
for (String packageId:packageSet){
|
||||||
|
ServicePackageDO servicePackageDO = servicePackageService.validServicePackage(packageId);
|
||||||
|
menuIds.addAll(servicePackageDO.getMenuIds());
|
||||||
|
}
|
||||||
|
|
||||||
// 更新租户
|
// 更新租户
|
||||||
TenantDO updateObj = BeanUtils.toBean(updateReqVO, TenantDO.class);
|
TenantDO updateObj = BeanUtils.toBean(updateReqVO, TenantDO.class);
|
||||||
tenantMapper.updateById(updateObj);
|
tenantMapper.updateById(updateObj);
|
||||||
// 如果套餐发生变化,则修改其角色的权限
|
// 如果套餐发生变化,则修改其角色的权限
|
||||||
if (ObjectUtil.notEqual(tenant.getPackageId(), updateReqVO.getPackageId())) {
|
if (ObjectUtil.notEqual(tenant.getPackageId(), updateReqVO.getPackageId())) {
|
||||||
updateTenantRoleMenu(tenant.getId(), tenantPackage.getMenuIds());
|
updateTenantRoleMenu(tenant.getId(), menuIds);
|
||||||
}
|
}
|
||||||
//更新租户顶级部门名称
|
//更新租户顶级部门名称
|
||||||
DeptDO deptDO = deptService.getTenantDeptTop(updateReqVO.getId());
|
DeptDO deptDO = deptService.getTenantDeptTop(updateReqVO.getId());
|
||||||
@ -264,7 +301,20 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<TenantDO> getTenantPage(TenantPageReqVO pageReqVO) {
|
public PageResult<TenantDO> getTenantPage(TenantPageReqVO pageReqVO) {
|
||||||
return tenantMapper.selectPage(pageReqVO);
|
PageResult<TenantDO> result = tenantMapper.selectPage(pageReqVO);
|
||||||
|
//查出所有服务
|
||||||
|
List<ServicePackageDO> list = servicePackageService.getServicePackageListByStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
Map<String,String> map = list.stream().collect(Collectors.toMap(ServicePackageDO::getId,ServicePackageDO::getName));
|
||||||
|
result.getList().forEach(item->{
|
||||||
|
Set<String> strSet = new HashSet<>();
|
||||||
|
if(null!=item.getPackageId()){
|
||||||
|
for (String id :item.getPackageId()){
|
||||||
|
strSet.add(map.get(id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
item.setPackageId(strSet);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -282,6 +332,18 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
return tenantMapper.selectCountByPackageId(packageId);
|
return tenantMapper.selectCountByPackageId(packageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得使用指定套餐的租户数量
|
||||||
|
*
|
||||||
|
* @param packageId 租户套餐编号
|
||||||
|
* @return 租户数量
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@TenantIgnore
|
||||||
|
public Long getTenantCountByPackageId(String packageId) {
|
||||||
|
return tenantMapper.selectCount(new LambdaQueryWrapper<TenantDO>().like(TenantDO::getPackageId,packageId));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TenantDO> getTenantListByPackageId(Long packageId) {
|
public List<TenantDO> getTenantListByPackageId(Long packageId) {
|
||||||
return tenantMapper.selectListByPackageId(packageId);
|
return tenantMapper.selectListByPackageId(packageId);
|
||||||
@ -307,18 +369,20 @@ public class TenantServiceImpl implements TenantService {
|
|||||||
}
|
}
|
||||||
// 获得租户,然后获得菜单
|
// 获得租户,然后获得菜单
|
||||||
TenantDO tenant = getTenant(TenantContextHolder.getRequiredTenantId());
|
TenantDO tenant = getTenant(TenantContextHolder.getRequiredTenantId());
|
||||||
Set<Long> menuIds;
|
Set<Long> menuIds = new HashSet<>();
|
||||||
if (isSystemTenant(tenant)) { // 系统租户,菜单是全量的
|
if (isSystemTenant(tenant)) { // 系统租户,菜单是全量的
|
||||||
menuIds = CollectionUtils.convertSet(menuService.getMenuList(), MenuDO::getId);
|
menuIds = CollectionUtils.convertSet(menuService.getMenuList(), MenuDO::getId);
|
||||||
} else {
|
} else {
|
||||||
menuIds = tenantPackageService.getTenantPackage(tenant.getPackageId()).getMenuIds();
|
for (String packageId:tenant.getPackageId()){
|
||||||
|
menuIds.addAll(servicePackageService.getServicePackage(packageId).getMenuIds());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 执行处理器
|
// 执行处理器
|
||||||
handler.handle(menuIds);
|
handler.handle(menuIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isSystemTenant(TenantDO tenant) {
|
private static boolean isSystemTenant(TenantDO tenant) {
|
||||||
return Objects.equals(tenant.getPackageId(), TenantDO.PACKAGE_ID_SYSTEM);
|
return null==tenant.getPackageId();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isTenantDisable() {
|
private boolean isTenantDisable() {
|
||||||
|
@ -74,6 +74,15 @@ public interface AdminUserService {
|
|||||||
*/
|
*/
|
||||||
void updateUserPassword(Long id, String password);
|
void updateUserPassword(Long id, String password);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改用户所属部门
|
||||||
|
* @author vinjor-M
|
||||||
|
* @date 16:34 2024/8/2
|
||||||
|
* @param id 用户id
|
||||||
|
* @param deptId H部门id
|
||||||
|
**/
|
||||||
|
void updateUserDept(Long id,Long deptId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改状态
|
* 修改状态
|
||||||
*
|
*
|
||||||
|
@ -207,6 +207,22 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
LogRecordContext.putVariable("newPassword", updateObj.getPassword());
|
LogRecordContext.putVariable("newPassword", updateObj.getPassword());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateUserDept(Long id, Long deptId) {
|
||||||
|
// 1. 校验用户存在
|
||||||
|
AdminUserDO user = validateUserExists(id);
|
||||||
|
|
||||||
|
// 2. 更新密码
|
||||||
|
AdminUserDO updateObj = new AdminUserDO();
|
||||||
|
updateObj.setId(id);
|
||||||
|
updateObj.setDeptId(deptId);
|
||||||
|
userMapper.updateById(updateObj);
|
||||||
|
|
||||||
|
// 3. 记录操作日志上下文
|
||||||
|
LogRecordContext.putVariable("user", user);
|
||||||
|
LogRecordContext.putVariable("newDept", updateObj.getDeptId());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateUserStatus(Long id, Integer status) {
|
public void updateUserStatus(Long id, Integer status) {
|
||||||
// 校验用户存在
|
// 校验用户存在
|
||||||
|
@ -27,9 +27,7 @@ import org.springframework.context.annotation.Import;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
|
import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
|
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
|
||||||
@ -153,7 +151,6 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class, o -> {
|
TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class, o -> {
|
||||||
o.setContactName("芋道");
|
o.setContactName("芋道");
|
||||||
o.setContactMobile("15601691300");
|
o.setContactMobile("15601691300");
|
||||||
o.setPackageId(100L);
|
|
||||||
o.setStatus(randomCommonStatus());
|
o.setStatus(randomCommonStatus());
|
||||||
o.setWebsite("https://www.iocoder.cn");
|
o.setWebsite("https://www.iocoder.cn");
|
||||||
o.setUsername("yunai");
|
o.setUsername("yunai");
|
||||||
@ -185,11 +182,12 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
o.setStatus(randomCommonStatus());
|
o.setStatus(randomCommonStatus());
|
||||||
o.setWebsite(randomString());
|
o.setWebsite(randomString());
|
||||||
});
|
});
|
||||||
|
Set<String> set = new HashSet<>();
|
||||||
|
set.add("0");
|
||||||
// mock 套餐
|
// mock 套餐
|
||||||
TenantPackageDO tenantPackage = randomPojo(TenantPackageDO.class,
|
TenantPackageDO tenantPackage = randomPojo(TenantPackageDO.class,
|
||||||
o -> o.setMenuIds(asSet(200L, 201L)));
|
o -> o.setMenuIds(asSet(200L, 201L)));
|
||||||
when(tenantPackageService.validTenantPackage(eq(reqVO.getPackageId()))).thenReturn(tenantPackage);
|
// when(tenantPackageService.validTenantPackage(eq(reqVO.getPackageId()))).thenReturn(tenantPackage);
|
||||||
// mock 所有角色
|
// mock 所有角色
|
||||||
RoleDO role100 = randomPojo(RoleDO.class, o -> o.setId(100L).setCode(RoleCodeEnum.TENANT_ADMIN.getCode()));
|
RoleDO role100 = randomPojo(RoleDO.class, o -> o.setId(100L).setCode(RoleCodeEnum.TENANT_ADMIN.getCode()));
|
||||||
role100.setTenantId(dbTenant.getId());
|
role100.setTenantId(dbTenant.getId());
|
||||||
@ -221,7 +219,9 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testUpdateTenant_system() {
|
public void testUpdateTenant_system() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(PACKAGE_ID_SYSTEM));
|
Set<String> set = new HashSet<>();
|
||||||
|
set.add("0");
|
||||||
|
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(set));
|
||||||
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
||||||
// 准备参数
|
// 准备参数
|
||||||
TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class, o -> {
|
TenantSaveReqVO reqVO = randomPojo(TenantSaveReqVO.class, o -> {
|
||||||
@ -259,7 +259,9 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testDeleteTenant_system() {
|
public void testDeleteTenant_system() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(PACKAGE_ID_SYSTEM));
|
Set<String> set = new HashSet<>();
|
||||||
|
set.add("0");
|
||||||
|
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(set));
|
||||||
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
||||||
// 准备参数
|
// 准备参数
|
||||||
Long id = dbTenant.getId();
|
Long id = dbTenant.getId();
|
||||||
@ -346,9 +348,13 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetTenantListByPackageId() {
|
public void testGetTenantListByPackageId() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
TenantDO dbTenant1 = randomPojo(TenantDO.class, o -> o.setPackageId(1L));
|
Set<String> set = new HashSet<>();
|
||||||
|
set.add("1");
|
||||||
|
TenantDO dbTenant1 = randomPojo(TenantDO.class, o -> o.setPackageId(set));
|
||||||
tenantMapper.insert(dbTenant1);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant1);// @Sql: 先插入出一条存在的数据
|
||||||
TenantDO dbTenant2 = randomPojo(TenantDO.class, o -> o.setPackageId(2L));
|
Set<String> set2 = new HashSet<>();
|
||||||
|
set.add("2");
|
||||||
|
TenantDO dbTenant2 = randomPojo(TenantDO.class, o -> o.setPackageId(set2));
|
||||||
tenantMapper.insert(dbTenant2);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant2);// @Sql: 先插入出一条存在的数据
|
||||||
|
|
||||||
// 调用
|
// 调用
|
||||||
@ -360,9 +366,13 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetTenantCountByPackageId() {
|
public void testGetTenantCountByPackageId() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
TenantDO dbTenant1 = randomPojo(TenantDO.class, o -> o.setPackageId(1L));
|
Set<String> set = new HashSet<>();
|
||||||
|
set.add("1");
|
||||||
|
TenantDO dbTenant1 = randomPojo(TenantDO.class, o -> o.setPackageId(set));
|
||||||
tenantMapper.insert(dbTenant1);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant1);// @Sql: 先插入出一条存在的数据
|
||||||
TenantDO dbTenant2 = randomPojo(TenantDO.class, o -> o.setPackageId(2L));
|
Set<String> set2 = new HashSet<>();
|
||||||
|
set.add("2");
|
||||||
|
TenantDO dbTenant2 = randomPojo(TenantDO.class, o -> o.setPackageId(set2));
|
||||||
tenantMapper.insert(dbTenant2);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant2);// @Sql: 先插入出一条存在的数据
|
||||||
|
|
||||||
// 调用
|
// 调用
|
||||||
@ -423,7 +433,9 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
// mock 未禁用
|
// mock 未禁用
|
||||||
when(tenantProperties.getEnable()).thenReturn(true);
|
when(tenantProperties.getEnable()).thenReturn(true);
|
||||||
// mock 租户
|
// mock 租户
|
||||||
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(PACKAGE_ID_SYSTEM));
|
Set<String> set = new HashSet<>();
|
||||||
|
set.add("1");
|
||||||
|
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(set));
|
||||||
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
||||||
TenantContextHolder.setTenantId(dbTenant.getId());
|
TenantContextHolder.setTenantId(dbTenant.getId());
|
||||||
// mock 菜单
|
// mock 菜单
|
||||||
@ -443,7 +455,9 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
|
|||||||
// mock 未禁用
|
// mock 未禁用
|
||||||
when(tenantProperties.getEnable()).thenReturn(true);
|
when(tenantProperties.getEnable()).thenReturn(true);
|
||||||
// mock 租户
|
// mock 租户
|
||||||
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(200L));
|
Set<String> set = new HashSet<>();
|
||||||
|
set.add("200");
|
||||||
|
TenantDO dbTenant = randomPojo(TenantDO.class, o -> o.setPackageId(set));
|
||||||
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
tenantMapper.insert(dbTenant);// @Sql: 先插入出一条存在的数据
|
||||||
TenantContextHolder.setTenantId(dbTenant.getId());
|
TenantContextHolder.setTenantId(dbTenant.getId());
|
||||||
// mock 菜单
|
// mock 菜单
|
||||||
|
Loading…
Reference in New Issue
Block a user