SysTenantFacadeImpl.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package cc.uncarbon.module.sys.facade.impl;
  2. import cc.uncarbon.module.sys.entity.SysTenantEntity;
  3. import cc.uncarbon.module.sys.facade.SysTenantFacade;
  4. import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysRoleDTO;
  5. import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysUserDTO;
  6. import cc.uncarbon.module.sys.model.request.AdminInsertSysTenantDTO;
  7. import cc.uncarbon.module.sys.service.SysRoleService;
  8. import cc.uncarbon.module.sys.service.SysTenantService;
  9. import cc.uncarbon.module.sys.service.SysUserRoleRelationService;
  10. import cc.uncarbon.module.sys.service.SysUserService;
  11. import lombok.RequiredArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. /**
  16. * 系统租户防腐层,用于解决循环依赖
  17. */
  18. @RequiredArgsConstructor
  19. @Service
  20. @Slf4j
  21. public class SysTenantFacadeImpl implements SysTenantFacade {
  22. private final SysTenantService sysTenantService;
  23. private final SysRoleService sysRoleService;
  24. private final SysUserRoleRelationService sysUserRoleRelationService;
  25. private final SysUserService sysUserService;
  26. @Override
  27. @Transactional(rollbackFor = Exception.class)
  28. public Long adminInsert(AdminInsertSysTenantDTO dto) {
  29. log.info("[后台管理-新增系统租户] >> 入参={}", dto);
  30. sysTenantService.checkExistence(dto);
  31. /*
  32. 1. 加入一个新租户(tenant)
  33. 这里是直接顺带创建管理员账号了, 你可以根据业务需要决定是否创建
  34. */
  35. SysTenantEntity entity = sysTenantService.adminInsert(dto);
  36. Long newTenantEntityId = entity.getId();
  37. Long newTenantId = entity.getTenantId();
  38. /*
  39. 2. 创建一个新角色(role)
  40. 注意: 这里并没有指派其可见菜单,需要用超管账号授权
  41. */
  42. Long newRoleId = sysRoleService.adminInsert(
  43. AdminInsertOrUpdateSysRoleDTO.builder()
  44. .tenantId(newTenantId)
  45. .title(dto.getTenantName() + "管理员")
  46. .value("Admin")
  47. .build()
  48. );
  49. /*
  50. 3. 创建一个新用户
  51. */
  52. Long newUserId = sysUserService.adminInsert(
  53. AdminInsertOrUpdateSysUserDTO.builder()
  54. .tenantId(newTenantId)
  55. .username(dto.getTenantAdminUsername())
  56. .passwordOfNewUser(dto.getTenantAdminPassword())
  57. .nickname(dto.getTenantName() + "管理员")
  58. .email(dto.getTenantAdminEmail())
  59. .phoneNo(dto.getTenantAdminPhoneNo())
  60. .build()
  61. );
  62. /*
  63. 4. 将新用户绑定至新角色上
  64. */
  65. sysUserRoleRelationService.adminInsert(newTenantId, newUserId, newRoleId);
  66. /*
  67. 5. 把管理员账号更新进库
  68. */
  69. SysTenantEntity update = new SysTenantEntity().setTenantAdminUserId(newUserId);
  70. update.setId(newTenantEntityId);
  71. sysTenantService.adminUpdate(update);
  72. return newTenantId;
  73. }
  74. }