S8DimensionService.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Admin.NET.Plugin.AiDOP.Dto.S8;
  2. using Admin.NET.Plugin.AiDOP.Entity.S8;
  3. namespace Admin.NET.Plugin.AiDOP.Service.S8;
  4. /// <summary>
  5. /// S8 业务维度元数据只读服务(S_STAGE / ORDER_FLOW)。
  6. /// TenantId=0 / FactoryId=0 表示全局基线,与 tenant/factory 数据并存。
  7. /// </summary>
  8. public class S8DimensionService : ITransient
  9. {
  10. private readonly SqlSugarRepository<AdoS8Dimension> _dimRep;
  11. private readonly SqlSugarRepository<AdoS8DimensionNode> _nodeRep;
  12. public S8DimensionService(
  13. SqlSugarRepository<AdoS8Dimension> dimRep,
  14. SqlSugarRepository<AdoS8DimensionNode> nodeRep)
  15. {
  16. _dimRep = dimRep;
  17. _nodeRep = nodeRep;
  18. }
  19. public async Task<List<AdoS8DimensionDto>> GetDimensionsAsync(long tenantId)
  20. {
  21. var rows = await _dimRep.AsQueryable()
  22. .Where(x => (x.TenantId == 0 || x.TenantId == tenantId)
  23. && x.Enabled)
  24. .OrderBy(x => x.SortNo)
  25. .OrderBy(x => x.Id)
  26. .ToListAsync();
  27. return rows.Select(x => new AdoS8DimensionDto
  28. {
  29. DimensionCode = x.DimensionCode,
  30. DimensionName = x.DimensionName,
  31. Enabled = x.Enabled,
  32. SortNo = x.SortNo,
  33. Remark = x.Remark,
  34. }).ToList();
  35. }
  36. public async Task<List<AdoS8DimensionNodeDto>> GetDimensionNodesAsync(long tenantId, string? dimensionCode)
  37. {
  38. if (string.IsNullOrWhiteSpace(dimensionCode))
  39. return new List<AdoS8DimensionNodeDto>();
  40. var nodes = await _nodeRep.AsQueryable()
  41. .Where(x => (x.TenantId == 0 || x.TenantId == tenantId)
  42. && x.DimensionCode == dimensionCode
  43. && x.Enabled)
  44. .OrderBy(x => x.SortNo)
  45. .OrderBy(x => x.Id)
  46. .ToListAsync();
  47. return BuildTree(nodes, null);
  48. }
  49. private static List<AdoS8DimensionNodeDto> BuildTree(List<AdoS8DimensionNode> nodes, long? parentId) =>
  50. nodes
  51. .Where(n => n.ParentId == parentId)
  52. .Select(n => new AdoS8DimensionNodeDto
  53. {
  54. Id = n.Id,
  55. DimensionCode = n.DimensionCode,
  56. NodeCode = n.NodeCode,
  57. NodeName = n.NodeName,
  58. ParentId = n.ParentId,
  59. Level = n.Level,
  60. Path = n.Path,
  61. IsSelectable = n.IsSelectable,
  62. Disabled = !n.IsSelectable,
  63. Enabled = n.Enabled,
  64. SortNo = n.SortNo,
  65. Remark = n.Remark,
  66. Children = BuildTree(nodes, n.Id),
  67. })
  68. .ToList();
  69. }