using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Web; using IoT.Shared.Application.Domain.Entities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Platform.ViewModels; using System.Linq; namespace Platform.Controllers { [Authorize] [ApiExplorerSettings(IgnoreApi = true)] public class HomeController : BaseController { private readonly IUserService _useService; private readonly IRepository _userRepo; private readonly IRepository _areaRepo; private readonly IRepository _organRepo; private readonly IRepository _buildingRepo; public HomeController(IUserService userService, IRepository userRepo, IRepository areaRepo, IRepository organRepo, IRepository buildingRepo) { this._useService = userService; this._userRepo = userRepo; this._areaRepo = areaRepo; this._organRepo = organRepo; this._buildingRepo = buildingRepo; } public IActionResult Index() { var area = this._areaRepo.ReadOnlyTable() .Where(o => o.Name == "南关区") .Include(o => o.Parent).ThenInclude(o => o.Parent).First(); return View(); } public IActionResult Building(HomeModel model) { var userOrganId = User.GetOrganId().Value;//当前用户机构Id var currentOrgan = this._organRepo.ReadOnlyTable().FirstOrDefault(o => o.Id == userOrganId);//当前用户机构 var organList = this._organRepo.ReadOnlyTable()//当前用户机构及下级机构 .Where(o => o.ParentId != null) .Where(o => o.Left >= currentOrgan.Left && o.Right <= currentOrgan.Right) .Include(o => o.Buildings) .ToList(); organList.ToTree(); var rootOrganId = this._organRepo.ReadOnlyTable().Where(o => o.Number == "root").Select(o => o.Id).FirstOrDefault(); model.Organs = organList.Where(o => o.Parent == null).ToList(); if (model.BuildingId.HasValue)//选中建筑,则建筑所属机构为当前机构 { model.Organ = organList.SelectMany(o => o.Buildings).FirstOrDefault(o => o.Id == model.BuildingId.Value).Organ; } else { if (model.OrganId.HasValue) { model.Organ = organList.FirstOrDefault(o => o.Id == model.OrganId.Value); } else {//即未选中建筑也未选中机构,则用户所在机构为当前机构 model.Organ = organList.FirstOrDefault(o => o.Id == userOrganId); } } model.OrganId = model.Organ.Id; var rootBuildingId = this._buildingRepo.ReadOnlyTable().Where(o => o.Number == "root").Select(o => o.Id).FirstOrDefault(); if (model.BuildingId.HasValue) { model.Building = model.Organ.Buildings.FirstOrDefault(o => o.Id == model.BuildingId.Value); model.Buildings = model.Organ.Buildings.Where(o => o.ParentId == model.BuildingId.Value).ToList(); } else { model.Buildings = model.Organ.Buildings.Where(o => o.ParentId == rootBuildingId).ToList(); } var currentBuilding = model.BuildingId.HasValue ? this._buildingRepo.ReadOnlyTable().FirstOrDefault(o => o.Id == model.BuildingId.Value) : null; var query = this._buildingRepo.ReadOnlyTable() .Where(o => o.ParentId != null) .Where(o => o.OrganId == model.OrganId.Value) .WhereIf(!model.ShowAll && model.BuildingId.HasValue, o => o.Id == model.BuildingId.Value) .WhereIf(!model.ShowAll && !model.BuildingId.HasValue, o => false) .WhereIf(model.ShowAll && model.BuildingId.HasValue, o => o.Left >= currentBuilding.Left && o.Right <= currentBuilding.Right) .SelectMany(o => o.IoTGateways) .SelectMany(o => o.Devices); model.TotalCount = query.Count(); model.Deviceses = query .Include(o => o.Data) .Skip(model.PageSize * (model.PageIndex - 1)) .Take(model.PageSize).ToList(); foreach (var item in organList) { item.Buildings = item.Buildings.ToTree().Where(o => o.ParentId == rootBuildingId).ToList(); } return View(model); } public IActionResult Alarm() { return View(); } public IActionResult Product() { return View(); } public IActionResult Device() { return View(); } public IActionResult Organ() { return View(); } public IActionResult Nodes() { return View(); } public IActionResult Node() { return View(); } public IActionResult Index3() { return View(); } public IActionResult Index4() { return View(); } private object Convert(Organ root) { return new { title = root.Name, key = root.Number, children = root.Children.Select(o => Convert(o)) }; } public string Mac(string id) { return Helper.Instance.MacEncrypt(id); } } }