using Admin.NET.Plugin.AiDOP.Dto.S8; using Admin.NET.Plugin.AiDOP.Entity.S8; namespace Admin.NET.Plugin.AiDOP.Service.S8; public class S8SceneTreeService : ITransient { private readonly SqlSugarRepository _rep; public S8SceneTreeService(SqlSugarRepository rep) => _rep = rep; public async Task> GetSceneTreeAsync(long tenantId, long factoryId) { var nodes = await _rep.AsQueryable() .Where(x => (x.TenantId == 0 || x.TenantId == tenantId) && (x.FactoryId == 0 || x.FactoryId == factoryId) && x.Enabled) .OrderBy(x => x.SortNo) .OrderBy(x => x.Id) .ToListAsync(); return BuildTree(nodes, null); } private static List BuildTree(List nodes, long? parentId) => nodes .Where(n => n.ParentId == parentId) .Select(n => new AdoS8SceneTreeNodeDto { Id = n.Id, ParentId = n.ParentId, NodeCode = n.NodeCode, NodeName = n.NodeName, Level = n.Level, Path = n.Path, SModule = n.SModule, IsLeaf = n.IsLeaf, Disabled = !n.IsLeaf, Children = BuildTree(nodes, n.Id), }) .ToList(); }