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;
namespace IStation.Application
{
///
/// LogicTree
///
[Route("Main/LogicTree/Logic")]
[ApiDescriptionSettings("Main", Name = "业务清单(业务)", Order = 997)]
public class LogicTree_LogicController : IDynamicApiController
{
///
/// 通过 CorpID 获取树(业务)
///
[Route("GetTreeByCorpID@V1.0")]
[HttpGet]
public List GetTreeByCorpID([FromQuery][Required] CorpIDInput input)
{
var corpId = input.CorpID;
var cacheKey = $"Main_LogicTree_Logic_GetTreeByCorpID_{corpId}";
var vm_list = MemoryCacheHelper.GetSet(cacheKey, () =>
{
#region 获取业务类别列表
var service_logic_catalog = new Service.LogicCatalog();
var catalog_list = service_logic_catalog.GetByCorpID(corpId);
if (catalog_list == null || catalog_list.Count < 1)
{
return default;
}
catalog_list = catalog_list.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList();
if (catalog_list.Count < 1)
{
return default;
}
#endregion
#region 获取业务清单列表
var vm_cache_list = new List();
var service_logic_tree = new Service.LogicTree();
foreach (var catalog in catalog_list)
{
var logic_tree_list = service_logic_tree.GetExByCatalogID(corpId, catalog.ID);
var vm_logic_tree_list = new List();
if (logic_tree_list != null || logic_tree_list.Count > 0)
{
foreach (var logic_tree in logic_tree_list)
{
var vm_logic_tree_item = new LogicTreeItemDto(logic_tree);
var vm_logic_tree_parent_item = vm_logic_tree_list.Find(t => t.ID == vm_logic_tree_item.ParentID);
if (vm_logic_tree_parent_item != null)
{
vm_logic_tree_parent_item.Children.Add(vm_logic_tree_item);
}
vm_logic_tree_list.Add(vm_logic_tree_item);
}
vm_logic_tree_list = vm_logic_tree_list.Where(t => t.ParentID == 0).OrderBy(t => t.SortCode).ToList();
}
vm_cache_list.Add(new LogicCatalogExItemsLogicDto(catalog, vm_logic_tree_list));
}
#endregion
return vm_cache_list;
}, CacheHelper.CacheLevel1);
return vm_list;
}
///
/// 通过 CatalogID 获取(业务)
///
[Route("GetTreeByCatalogID@V1.0")]
[HttpGet]
public List GetTreeByCatalogID([FromQuery][Required] CatalogIDUnderCorpInput input)
{
var corpId = input.CorpID;
var catalogId = input.CatalogID;
var cacheKey = $"Main_LogicTree_Logic_GetTreeByCatalogID_{corpId}_{catalogId}";
var vm_list = MemoryCacheHelper.GetSet(cacheKey, () =>
{
//获取业务清单
var logic_tree_list = new Service.LogicTree().GetExByCatalogID(corpId, catalogId);
if (logic_tree_list == null || logic_tree_list.Count < 1)
{
return default;
}
var vm_cache_list = new List();
foreach (var logic_tree in logic_tree_list)
{
var vm_cache_item = new LogicTreeItemDto(logic_tree);
var vm_cache_parent = vm_cache_list.Find(t => t.ID == vm_cache_item.ParentID);
if (vm_cache_parent != null)
{
vm_cache_parent.Children.Add(vm_cache_item);
}
vm_cache_list.Add(vm_cache_item);
}
return vm_cache_list.Where(t => t.ParentID == 0).OrderBy(t => t.SortCode).ToList();
}, CacheHelper.CacheLevel2);
return vm_list;
}
///
/// 通过 CorpID 获取泵曲线逻辑树(业务)
///
[Route("GetPumpCurveLogicalTreeByCorpID@V1.0")]
[HttpGet]
public List GetPumpCurveLogicalTreeByCorpID([FromQuery][Required] CorpIDInput input)
{
var corpId = input.CorpID;
var cacheKey = $"Main_LogicTree_Logic_GetPumpCurveLogicalTreeByCorpID_{corpId}";
var vm_list = MemoryCacheHelper.GetSet(cacheKey, () =>
{
#region 获取业务类别列表
var service_logic_catalog = new Service.LogicCatalog();
var catalog_list = service_logic_catalog.GetByCorpID(corpId);
if (catalog_list == null || catalog_list.Count < 1)
{
return default;
}
catalog_list = catalog_list.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList();
if (catalog_list.Count < 1)
{
return default;
}
#endregion
#region 获取业务清单列表
var vm_cache_list = new List();
var service_logic_tree = new Service.LogicTree();
var service_logic_area = new Service.LogicArea();
var service_station = new Service.Station();
var service_product = new Service.Product();
var service_product_property = new Service.ProductTypePropertyGroup();
var service_curve = new Service.PumpCurveExMapping();
foreach (var catalog in catalog_list)
{
var logic_tree_list = service_logic_tree.GetByCatalogID(corpId, catalog.ID);
var vm_logic_tree_item_list = new List();
if (logic_tree_list != null || logic_tree_list.Count > 0)
{
foreach (var logic_tree in logic_tree_list)
{
var vm_logic_tree_item = new LogicalTreeItemDto();
vm_logic_tree_item.ID = $"{ObjectType.LogicTree}_{logic_tree.ID}";
var parentId = TreeParentIdsHelper.GetLastParentID(logic_tree.ParentIds);
if (parentId < 1)
{
vm_logic_tree_item.ParentID = string.Empty;
}
else
{
vm_logic_tree_item.ParentID = $"{ObjectType.LogicTree}_{parentId}";
}
vm_logic_tree_item.LogicalID = logic_tree.LogicID;
vm_logic_tree_item.LogicalType = logic_tree.LogicType;
if (logic_tree.LogicType == ObjectType.LogicArea)
{
var logic_area = service_logic_area.GetByID(logic_tree.CorpID, logic_tree.LogicID);
vm_logic_tree_item.LogicalName = logic_area.Name;
vm_logic_tree_item.LogicalModel = new LogicAreaLogicDto(logic_area);
}
else if (logic_tree.LogicType == ObjectType.Station)
{
var station = service_station.GetByID(logic_tree.CorpID, logic_tree.LogicID);
vm_logic_tree_item.LogicalName = station.Name;
vm_logic_tree_item.LogicalModel = new StationLogicDto(station);
}
vm_logic_tree_item.Children = new List();
var vm_logic_tree_parent_item = vm_logic_tree_item_list.Find(t => t.ID == vm_logic_tree_item.ParentID);
if (vm_logic_tree_parent_item != null)
{
vm_logic_tree_parent_item.Children.Add(vm_logic_tree_item);
}
vm_logic_tree_item_list.Add(vm_logic_tree_item);
if (logic_tree.LogicType == ObjectType.Station)
{
var pump_list = service_product.GetPumpListByBelongTypeAndBelongID(logic_tree.CorpID, logic_tree.LogicType, logic_tree.LogicID);
if (pump_list != null && pump_list.Count > 0)
{
foreach (var pump in pump_list)
{
var property_list = service_product_property.GetExItemsByProductTypeID(pump.CorpID, pump.ProductTypeID);
var vm_pump = new ProductLogicDto(pump, property_list);
var vm_pump_item = new LogicalTreeItemDto();
vm_pump_item.ID = $"{IStation.ObjectType.Product}_{pump.ID}";
vm_pump_item.ParentID = vm_logic_tree_item.ID;
vm_pump_item.LogicalID = vm_pump.ID;
vm_pump_item.LogicalType = IStation.ObjectType.Product;
vm_pump_item.LogicalName = vm_pump.Name;
vm_pump_item.LogicalModel = vm_pump;
vm_pump_item.Children = new List();
vm_logic_tree_item.Children.Add(vm_pump_item);
var curve_list = service_curve.GetByPumpID(vm_pump.CorpID, vm_pump.ID);
if (curve_list != null && curve_list.Count > 0)
{
foreach (var curve in curve_list)
{
var vm_curve = new PumpCurveLogicDto(curve);
var vm_curve_item = new LogicalTreeItemDto();
vm_curve_item.ID = $"{ObjectType.PumpCurveMapping}_{vm_curve.MappingID}";
vm_curve_item.ParentID = vm_pump_item.ID;
vm_pump_item.LogicalID = vm_curve.MappingID;
vm_curve_item.LogicalType = ObjectType.PumpCurveMapping;
vm_curve_item.LogicalName = vm_curve.OtherName;
vm_curve_item.LogicalModel = vm_curve;
vm_pump_item.Children.Add(vm_curve_item);
}
}
}
}
}
}
vm_logic_tree_item_list = vm_logic_tree_item_list.Where(t => string.IsNullOrEmpty(t.ParentID)).ToList();
}
vm_cache_list.Add(new LogicCatalogExLogicalTreeItemsLogicDto(catalog, vm_logic_tree_item_list));
}
#endregion
return vm_cache_list;
}, CacheHelper.CacheLevel3);
return vm_list;
}
}
}