TenantService.java 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.hosea.service.app.tenant;
  2. import com.alibaba.cola.dto.PageResponse;
  3. import com.hosea.cloud.web.exception.Assert;
  4. import com.hosea.service.app.tenant.executor.TenantCmdExecute;
  5. import com.hosea.service.app.tenant.executor.TenantQueryExecute;
  6. import com.hosea.service.user.client.dto.constant.TenantErrorCode;
  7. import com.hosea.service.user.client.dto.data.TenantDTO;
  8. import com.hosea.service.user.client.dto.data.TenantUniqueDTO;
  9. import com.hosea.service.user.client.dto.request.TenantAddCmd;
  10. import com.hosea.service.user.client.dto.request.TenantListPageQuery;
  11. import com.hosea.service.user.client.dto.request.TenantUpdateCmd;
  12. import jakarta.annotation.Resource;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.util.Optional;
  16. /**
  17. * 租户服务
  18. * <p>
  19. * <p>
  20. * <b>职责:协调层</b>
  21. * <p>
  22. * 统一暴露业务能力入口(API粒度)
  23. * <p>
  24. * 事务边界控制(@Transactional)
  25. * <p>
  26. * 跨聚合协调(如租户创建时同步初始化权限)
  27. * <p>
  28. * 基础参数透传(不处理业务逻辑)
  29. * <p>
  30. * <p>
  31. * <b>‌关键边界控制点‌</b>:
  32. * <p>
  33. * 流量方向:Controller → Service → (Cmd/Query)Execute → DomainService
  34. * <p>
  35. * 禁止反向调用:QueryExecute永远不能调用CmdExecute
  36. * <p>
  37. * 状态修改权限:只有CmdExecute可以修改领域对象状态
  38. * <p>
  39. * 数据可见性:QueryExecute可以直接访问Repository但CmdExecute必须通过DomainService
  40. *
  41. * @author hosea
  42. * @date 2025-06-23
  43. */
  44. @Service
  45. @Transactional
  46. public class TenantService {
  47. @Resource
  48. private TenantCmdExecute tenantCmd;
  49. @Resource
  50. private TenantQueryExecute tenantQuery;
  51. /**
  52. * 查
  53. */
  54. public Optional<TenantDTO> get(TenantUniqueDTO unique) {
  55. Assert.notNull(unique, TenantErrorCode.NOT_NULL);
  56. return tenantQuery.of(unique);
  57. }
  58. /**
  59. * 增
  60. */
  61. public void add(TenantAddCmd tenant) {
  62. Assert.notNull(tenant, TenantErrorCode.NOT_NULL);
  63. tenantCmd.add(tenant);
  64. }
  65. /**
  66. * 删
  67. */
  68. public void update(TenantUpdateCmd tenant) {
  69. Assert.notNull(tenant, TenantErrorCode.NOT_NULL);
  70. tenantCmd.update(tenant);
  71. }
  72. /**
  73. * 租户分页列表
  74. */
  75. public PageResponse<TenantDTO> list(TenantListPageQuery query) {
  76. return tenantQuery.list(Optional.ofNullable(query).orElseGet(TenantListPageQuery::new));
  77. }
  78. }