using Microsoft.AspNetCore.Mvc;
|
using System.Net;
|
using System.Net.Http.Headers;
|
using Microsoft.Extensions.Hosting.Internal;
|
using Microsoft.AspNetCore.Http.Extensions;
|
using IStation.Untity;
|
using Furion.DynamicApiController;
|
using System.ComponentModel.DataAnnotations;
|
using Mapster;
|
using Microsoft.AspNetCore.Http;
|
using Furion.DependencyInjection;
|
using Microsoft.AspNetCore.Authorization;
|
using Furion.DataEncryption;
|
using Furion.FriendlyException;
|
|
namespace IStation.Application
|
{
|
/// <summary>
|
/// Product
|
/// </summary>
|
[AllowAnonymous]
|
[Route("LargeScreen/Demo/Product")]
|
[ApiDescriptionSettings("LargeScreen", Name = "Demo(设备)", Order = 666)]
|
public class DemoProduct_Controller : IDynamicApiController, ITransient
|
{
|
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
|
/// <summary>
|
///
|
/// </summary>
|
public DemoProduct_Controller(IHttpContextAccessor httpContextAccessor)
|
{
|
_httpContextAccessor = httpContextAccessor;
|
}
|
|
|
/// <summary>
|
/// 通过 BelongType 和 BelongID 获取逻辑树
|
/// </summary>
|
[Route("GetLogicalTreeByBelongTypeAndBelongID")]
|
[HttpGet]
|
public List<LogicalTreeItemDto> GetLogicalTreeByBelongTypeAndBelongID([FromQuery][Required] BelongUnderCorpInput input)
|
{
|
var corpId = input.CorpID;
|
var belongType = input.BelongType;
|
var belongId = input.BelongID;
|
|
var cacheKey = $"LargeScreen_Demo_Product_GetLogicalTreeByBelongTypeAndBelongID_{corpId}_{belongType}_{belongId}";
|
var vm_list = MemoryCacheHelper.GetSet(cacheKey, () =>
|
{
|
|
#region 设备组
|
var group_list = new Service.ProductGroup().GetByBelongTypeAndBelongID(corpId, belongType, belongId);
|
var vm_logical_group_list = group_list?.Select(x =>
|
{
|
var vm_logical_group = new LogicalTreeItemDto();
|
vm_logical_group.ID = $"{ObjectType.ProductGroup}_{x.ID}";
|
vm_logical_group.ParentID = $"{ObjectType.ProductGroup}_{TreeParentIdsHelper.GetLastParentID(x.ParentIds)}";
|
vm_logical_group.LogicalName = x.Name;
|
vm_logical_group.LogicalType = ObjectType.ProductGroup;
|
vm_logical_group.LogicalID = x.ID;
|
vm_logical_group.LogicalModel = new DemoProductGroupDto(x);
|
vm_logical_group.Children = new List<LogicalTreeItemDto>();
|
return vm_logical_group;
|
}).ToList();
|
|
#endregion
|
|
#region 设备
|
|
var service_product_type_property_group = new Service.ProductTypePropertyGroup();
|
var product_list = new Service.Product().GetByBelongTypeAndBelongID(corpId, belongType, belongId);
|
var vm_logical_product_list = product_list?.Select(x =>
|
{
|
var vm_logical_product = new LogicalTreeItemDto();
|
vm_logical_product.ID = $"{ObjectType.Product}_{x.ID}";
|
if (x.ParentIds != null && x.ParentIds.Count > 0)
|
{
|
vm_logical_product.ParentID = $"{ObjectType.Product}_{x.ParentIds.Last()}";
|
}
|
else
|
{
|
vm_logical_product.ParentID = $"{ObjectType.ProductGroup}_{x.GroupID}";
|
}
|
vm_logical_product.LogicalName = x.Name;
|
vm_logical_product.LogicalType = ObjectType.Product;
|
vm_logical_product.LogicalID = x.ID;
|
vm_logical_product.LogicalModel = new DemoProductDto(x, service_product_type_property_group.GetExItemsByProductTypeID(x.CorpID, x.ProductTypeID));
|
vm_logical_product.Children = new List<LogicalTreeItemDto>();
|
return vm_logical_product;
|
}).ToList();
|
#endregion
|
|
#region 生成树
|
|
var vm_cache_list = new List<LogicalTreeItemDto>();
|
|
//遍历设备组
|
if (vm_logical_group_list != null && vm_logical_group_list.Count > 0)
|
{
|
foreach (var vm_logical_group in vm_logical_group_list)
|
{
|
var vm_logical_group_parent = vm_logical_group_list.Find(t => t.ID == vm_logical_group.ParentID);
|
if (vm_logical_group_parent == null)
|
{
|
vm_cache_list.Add(vm_logical_group);
|
}
|
else
|
{
|
vm_logical_group_parent.Children.Add(vm_logical_group);
|
}
|
}
|
}
|
|
//遍历设备
|
if (vm_logical_product_list != null && vm_logical_product_list.Count > 0)
|
{
|
foreach (var vm_logical_product in vm_logical_product_list)
|
{
|
var vm_logical_product_parent = vm_logical_product_list.Find(t => t.ID == vm_logical_product.ParentID);
|
if (vm_logical_product_parent == null)
|
{
|
vm_logical_product_parent = vm_logical_group_list?.Find(t => t.ID == vm_logical_product.ParentID);
|
}
|
if (vm_logical_product_parent == null)
|
{
|
vm_cache_list.Add(vm_logical_product);
|
}
|
else
|
{
|
vm_logical_product_parent.Children.Add(vm_logical_product);
|
}
|
}
|
}
|
|
|
|
return vm_cache_list;
|
|
#endregion
|
|
}, CacheHelper.CacheLevel2);
|
|
return vm_list;
|
}
|
|
}
|
}
|