EquipmentFamilyManager.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using Com.FirmLib.Bll;
  2. using Com.FirmLib.Entity;
  3. using Com.FirmLib.UI.Common;
  4. using FWindSoft.Data;
  5. using FWindSoft.DataFramework;
  6. using FWindSoft.Tools;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace Com.FirmLib.UI.BllCommon
  13. {
  14. public class EquipmentFamilyManager
  15. {
  16. //public static readonly EquipmentFamilyManager Instance = new EquipmentFamilyManager();
  17. private EquipmentFamilyManager()
  18. { }
  19. /// <summary>
  20. /// 获取当前设备信息
  21. /// </summary>
  22. /// <returns></returns>
  23. public static List<EquipmentFamilyItem> GetFamilys()
  24. {
  25. return MemoryCacheUtil.GetCacheItem<List<EquipmentFamilyItem>>("EquipmentFamily", () => BllFactory<EquipmentFamilyBll>.Instance.GetAllItems(), new TimeSpan(0,0,1800))??new List<EquipmentFamilyItem>();
  26. }
  27. /// <summary>
  28. /// 获取设备族中叶子级节点
  29. /// </summary>
  30. /// <returns></returns>
  31. public static List<EquipmentFamilyItem> GetFamilyLeaves()
  32. {
  33. var originItems = GetFamilys();
  34. List<EquipmentFamilyItem> items = new List<EquipmentFamilyItem>();
  35. Queue<EquipmentFamilyItem> searchItems = new Queue<EquipmentFamilyItem>(originItems);
  36. while (searchItems.Any())
  37. {
  38. var currentItem = searchItems.Dequeue();
  39. if (currentItem.ChildItems.Any())
  40. {
  41. currentItem.ChildItems.ForEach(c => searchItems.Enqueue(c));
  42. }
  43. else
  44. {
  45. items.Add(currentItem);
  46. }
  47. }
  48. return items;
  49. }
  50. /// <summary>
  51. /// 通过code取到名设备族名称
  52. /// </summary>
  53. /// <param name="code"></param>
  54. /// <returns></returns>
  55. public static string GetFamilyName(string code)
  56. {
  57. var listFamilys = GetFamilys();
  58. var family = listFamilys.FirstOrDefault(f=>f.Code==code);
  59. if (family != null)
  60. return family.Name;
  61. return string.Empty;
  62. }
  63. #region 相关信息点信息定义
  64. private readonly static Dictionary<string, List<EquipmentInfoPointItem>> m_InfoPointsCache = new Dictionary<string, List<EquipmentInfoPointItem>>();
  65. public static List<EquipmentInfoPointItem> GetInfoPointDefinitions(string code)
  66. {
  67. //避免破坏原始的的信息点定义集合
  68. List<EquipmentInfoPointItem> items = null;
  69. if (m_InfoPointsCache.TryGetValue(code, out items))
  70. {
  71. return new List<EquipmentInfoPointItem>(items);
  72. }
  73. items = BllFactory<EquipmentInfoPointBll>.Instance.GetPointInfoDefinitions(code)??new List<EquipmentInfoPointItem>();
  74. m_InfoPointsCache.Add(code, items);
  75. return new List<EquipmentInfoPointItem>(items);
  76. }
  77. #endregion
  78. public static EquipmentFamilyItem GetTopFamily(string code)
  79. {
  80. var familys = GetFamilys();
  81. return GetTopFamily(familys, code);
  82. }
  83. public static string GetaTopCode(string code)
  84. {
  85. var familys = GetFamilys();
  86. return GetTopFamily(familys, code)?.Code??string.Empty;
  87. }
  88. private static EquipmentFamilyItem GetTopFamily(List<EquipmentFamilyItem> items, string code)
  89. {
  90. var familys = items;
  91. foreach (var item in familys)
  92. {
  93. if (item.Code == code)
  94. {
  95. return item;
  96. }
  97. else
  98. {
  99. var result = GetTopFamily(item.ChildItems ?? new List<EquipmentFamilyItem>(), code);
  100. if (result != null)
  101. return item;
  102. }
  103. }
  104. return null;
  105. }
  106. }
  107. }