AGCManager.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. using NEIntelligentControl2.Models;
  2. using NEIntelligentControl2.Models.AGC;
  3. using NEIntelligentControl2.Models.Datas;
  4. using NEIntelligentControl2.Models.Messages;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Configuration;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace NEIntelligentControl2.Service.AGC
  12. {
  13. /// <summary>
  14. /// AGC信息管理
  15. /// </summary>
  16. public class AGCManager
  17. {
  18. /// <summary>
  19. /// AGC 信息
  20. /// </summary>
  21. public List<AGCInfo> AGCInfos;
  22. /// <summary>
  23. /// 标签点
  24. /// </summary>
  25. private List<TagInfo> _TagInfos;
  26. /// <summary>
  27. /// 需要读取历史的标签点
  28. /// </summary>
  29. private List<TagInfo> _HistoryTagInfos;
  30. /// <summary>
  31. /// 所有标签点
  32. /// </summary>
  33. private string _Tags;
  34. /// <summary>
  35. /// 数据路径
  36. /// </summary>
  37. private string _Url;
  38. /// <summary>
  39. /// 历史数据url
  40. /// </summary>
  41. private string _HistoyUrl;
  42. /// <summary>
  43. /// 数据路径
  44. /// </summary>
  45. private string _DataUrl;
  46. /// <summary>
  47. /// 信息路径
  48. /// </summary>
  49. private string _UrlInfo;
  50. private WEBHelper _WEBHelper;
  51. public AGCManager(WEBHelper web)
  52. {
  53. _WEBHelper = web;
  54. InitUrl();
  55. Init();
  56. }
  57. private void InitUrl()
  58. {
  59. try
  60. {
  61. #if (DEBUG)
  62. _UrlInfo = ConfigurationManager.AppSettings["ServicePathDebug"];
  63. _Url = ConfigurationManager.AppSettings["DataServicePathDebug"];
  64. #else
  65. _UrlInfo = ConfigurationManager.AppSettings["ServicePath"];
  66. _Url = ConfigurationManager.AppSettings["DataServicePath"];
  67. #endif
  68. }
  69. catch (Exception ex)
  70. {
  71. Console.WriteLine("读取配置文件[ServicePath]或[DataServicePath]出错!", ex);
  72. }
  73. }
  74. /// <summary>
  75. /// 初始化
  76. /// </summary>
  77. private void Init()
  78. {
  79. try
  80. {
  81. _HistoryTagInfos = new List<TagInfo>();
  82. _TagInfos = new List<TagInfo>();
  83. AGCInfos = _WEBHelper.HttpGetJSON<List<AGCInfo>>($"{_UrlInfo}/api/station/agc_net");
  84. InitTags();
  85. }
  86. catch (Exception ex)
  87. {
  88. Console.WriteLine(ex.Message);
  89. }
  90. }
  91. /// <summary>
  92. /// 初始化标签点
  93. /// </summary>
  94. private void InitTags()
  95. {
  96. StringBuilder sb = new StringBuilder();
  97. foreach (var v in AGCInfos)
  98. {
  99. FindTags(sb, v.AiPoints);
  100. FindTags(sb, v.DiPoints);
  101. FindHistoryTags(v);
  102. _TagInfos.AddRange(v.AiPoints);
  103. _TagInfos.AddRange(v.DiPoints);
  104. _TagInfos.Add(v.Status);
  105. sb.Append(v.Status.Tag).Append(',');
  106. }
  107. _Tags = sb.ToString();
  108. }
  109. /// <summary>
  110. /// 枚举需要读取历史的标签点
  111. /// </summary>
  112. private void FindHistoryTags(AGCInfo ai)
  113. {
  114. _HistoryTagInfos.Add(ai.Status);
  115. var vs = ai.AiPoints.Where(p => (p.Type == TagType.PowerSet || p.Type == TagType.ActualPower) && !string.IsNullOrWhiteSpace(p.Tag));
  116. foreach (var v in vs)
  117. {
  118. _HistoryTagInfos.Add(v);
  119. }
  120. }
  121. /// <summary>
  122. /// 枚举标签
  123. /// </summary>
  124. /// <param name="sb"></param>
  125. /// <param name="points"></param>
  126. private void FindTags(StringBuilder sb, List<TagInfo> points)
  127. {
  128. if (points == null) return;
  129. foreach (var v in points)
  130. {
  131. if (v == null) continue;
  132. foreach (var vv in v.Tags)
  133. {
  134. if (string.IsNullOrWhiteSpace(vv)) continue;
  135. sb.Append(vv).Append(',');
  136. }
  137. }
  138. }
  139. /// <summary>
  140. /// 数据刷新
  141. /// </summary>
  142. public void RefreshData(System.Windows.FrameworkElement fe)
  143. {
  144. try
  145. {
  146. if (_DataUrl == null)
  147. {
  148. _DataUrl = $"{_Url}/ts/latest?keys={_Tags}";
  149. }
  150. var vs = _WEBHelper.HttpGetJSON<Dictionary<string, TsData>>(_DataUrl);
  151. fe.Dispatcher.Invoke(() =>
  152. {
  153. foreach (var v in _TagInfos)
  154. {
  155. v.UpdateData(vs);
  156. }
  157. });
  158. }
  159. catch (Exception ex)
  160. {
  161. Console.WriteLine(ex.ToString());
  162. }
  163. }
  164. /// <summary>
  165. /// 历史数据刷新
  166. /// </summary>
  167. public void RefreshLineData(System.Windows.FrameworkElement fe)
  168. {
  169. try
  170. {
  171. if (_HistoyUrl == null)
  172. {
  173. _HistoyUrl = $"{_Url}/ts/history/snap?interval=60";
  174. }
  175. var dte = DateTime.Now.GetTimeSpan();
  176. var dts = DateTime.Now.AddHours(-8).GetTimeSpan();
  177. foreach (var v in _HistoryTagInfos)
  178. {
  179. if (v.Tag == null) continue;
  180. var vs = _WEBHelper.HttpGetJSON<List<TsData>>($"{_HistoyUrl}&tagName={v.Tag}&startTs={dts}&endTs={dte}");
  181. fe.Dispatcher.Invoke(() => v.UpdateHistoryData(vs));
  182. }
  183. }
  184. catch (Exception ex)
  185. {
  186. Console.WriteLine(ex.ToString());
  187. }
  188. }
  189. }
  190. }