S8DimensionService.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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, long factoryId)
  20. {
  21. var rows = await _dimRep.AsQueryable()
  22. .Where(x => (x.TenantId == 0 || x.TenantId == tenantId)
  23. && (x.FactoryId == 0 || x.FactoryId == factoryId)
  24. && x.Enabled)
  25. .OrderBy(x => x.SortNo)
  26. .OrderBy(x => x.Id)
  27. .ToListAsync();
  28. return rows.Select(x => new AdoS8DimensionDto
  29. {
  30. DimensionCode = x.DimensionCode,
  31. DimensionName = x.DimensionName,
  32. Enabled = x.Enabled,
  33. SortNo = x.SortNo,
  34. Remark = x.Remark,
  35. }).ToList();
  36. }
  37. public async Task<List<AdoS8DimensionNodeDto>> GetDimensionNodesAsync(long tenantId, long factoryId, string? dimensionCode)
  38. {
  39. if (string.IsNullOrWhiteSpace(dimensionCode))
  40. return new List<AdoS8DimensionNodeDto>();
  41. var nodes = await _nodeRep.AsQueryable()
  42. .Where(x => (x.TenantId == 0 || x.TenantId == tenantId)
  43. && (x.FactoryId == 0 || x.FactoryId == factoryId)
  44. && x.DimensionCode == dimensionCode
  45. && x.Enabled)
  46. .OrderBy(x => x.SortNo)
  47. .OrderBy(x => x.Id)
  48. .ToListAsync();
  49. return BuildTree(nodes, null);
  50. }
  51. private static List<AdoS8DimensionNodeDto> BuildTree(List<AdoS8DimensionNode> nodes, long? parentId) =>
  52. nodes
  53. .Where(n => n.ParentId == parentId)
  54. .Select(n => new AdoS8DimensionNodeDto
  55. {
  56. Id = n.Id,
  57. DimensionCode = n.DimensionCode,
  58. NodeCode = n.NodeCode,
  59. NodeName = n.NodeName,
  60. ParentId = n.ParentId,
  61. Level = n.Level,
  62. Path = n.Path,
  63. IsSelectable = n.IsSelectable,
  64. Disabled = !n.IsSelectable,
  65. Enabled = n.Enabled,
  66. SortNo = n.SortNo,
  67. Remark = n.Remark,
  68. Children = BuildTree(nodes, n.Id),
  69. })
  70. .ToList();
  71. }