RelatedDataUpload.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Threading;
  6. using Newtonsoft.Json;
  7. using Newtonsoft.Json.Linq;
  8. using SAGA.DotNetUtils.Http;
  9. using SAGA.DotNetUtils.Logger;
  10. using SAGA.MBI.Common;
  11. using SAGA.Models;
  12. namespace SAGA.GplotManage
  13. {
  14. public class RelatedDataUpload
  15. {
  16. //二级Url
  17. private static string m_sUrl = "data-platform-3/relation/";
  18. private static string m_baseUrl = $"{ MBIConst.DataPlatformLocalHost}{m_sUrl}";
  19. private static string m_userPwd = $"projectId={MBIControl.ProjectCur.Id}&secret={MBIControl.ProjectCur.Password}";
  20. /// <summary>
  21. /// 创建图实例
  22. /// </summary>
  23. /// <param name="graphType">图类型</param>
  24. /// <returns></returns>
  25. public static string CreateGraphInstance(GraphTypeEnum graphType, string begin_time)
  26. {
  27. return CreateGraphInstance(graphType + "", begin_time);
  28. }
  29. /// <summary>
  30. /// 创建图实例
  31. /// </summary>
  32. /// <param name="graphType">图类型</param>
  33. /// <returns></returns>
  34. public static string CreateGraphInstance(string graphType, string begin_time)
  35. {
  36. string url = $"{m_baseUrl}graph_instance/create?{m_userPwd}";
  37. // string postData = $"{{\"graph_type\":\"{graphType}\"}}";
  38. string postData = $"{{\"graph_type\":\"{graphType}\",\"periods\":[{{\"begin_time\":\"{begin_time}\",\"end_time\":\"29000101000000\"}}]}}";
  39. RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
  40. return restClient.GetRequest().GetValue("graph_id");
  41. }
  42. /// <summary>
  43. /// 查询图实例(如果当前时间点与最新的节点有重复,
  44. /// 修改之前的图实例时间,然后创建新的,20171123)
  45. /// 默认过期时间段是不存在的,所以当前只会存在一个图实例
  46. /// </summary>
  47. /// <param name="graphType">图类型</param>
  48. /// <returns></returns>
  49. public static string QueryGraphInstance(GraphTypeEnum graphType)
  50. {
  51. string url = $"{m_baseUrl}graph_instance/query?{m_userPwd}";
  52. string postData = $"{{\"graph_type\":\"{graphType}\"}}";
  53. postData = $"{{\"criteria\":{{\"graph_type\":\"{graphType}\"}}}}";
  54. RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
  55. return restClient.GetRequest();
  56. }
  57. /// <summary>
  58. /// 根据图类型获取图实例id
  59. /// </summary>
  60. /// <param name="graphType"></param>
  61. /// <returns></returns>
  62. public static string QueryGraphInstance(string graphType)
  63. {
  64. string url = $"{m_baseUrl}graph_instance/query?{m_userPwd}";
  65. string postData = $"{{\"graph_type\":\"{graphType}\"}}";
  66. postData = $"{{\"criteria\":{{\"graph_type\":\"{graphType}\"}}}}";
  67. RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
  68. return restClient.GetRequest();
  69. }
  70. /// <summary>
  71. /// 修改实例(如果当前时间点与最新的节点有重复,
  72. /// 修改之前的图实例时间,然后创建新的,20171123)
  73. /// </summary>
  74. /// <param name="graphId">图类型</param>
  75. /// <param name="statrDateTime"></param>
  76. /// <param name="endDateTime"></param>
  77. /// <returns></returns>
  78. public static string UpdateGraphInstance(string graphId, string statrDateTime, string endDateTime)
  79. {
  80. string url = $"{m_baseUrl}graph_instance/update?{m_userPwd}";
  81. string postData = $"{{\"criteria\":{{\"graph_id\":\"{graphId}\"}},\"set\":{{\"periods\":[{{\"begin_time\":\"{statrDateTime}\",\"end_time\":\"{endDateTime}\"}}]}}}}";
  82. RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
  83. return restClient.GetRequest().GetValue("graph_id");
  84. }
  85. /// <summary>
  86. /// 关系类型上传
  87. /// </summary>
  88. /// <param name="criteria">关系数据</param>
  89. /// <returns></returns>
  90. public static bool CreateRelation(Criteria criteria)
  91. {
  92. string url = $"{m_baseUrl}create?{m_userPwd}";
  93. var listCriterias = new List<ReleateData>();
  94. //移除设备云端ID为空的设备,空Id禁止上传
  95. for (int i = criteria.criterias.Count - 1; i >= 0; i--)
  96. {
  97. if (string.IsNullOrEmpty(criteria.criterias[i].from_id) ||string.IsNullOrEmpty( criteria.criterias[i].to_id ))
  98. {
  99. criteria.criterias.RemoveAt(i);
  100. }
  101. }
  102. if (criteria.criterias.Count == 0) return false;
  103. listCriterias.AddRange(criteria.criterias);
  104. var result = true;
  105. string postData2 = JsonConvert.SerializeObject(listCriterias);
  106. JObject jobject = new JObject();
  107. jobject.Add("criterias", JArray.FromObject(listCriterias));
  108. RestClient restClient1 = new RestClient(url, HttpVerb.POST, JsonConvert.SerializeObject(jobject).ToString());
  109. result = result && restClient1.GetRequest().IsSuccess();
  110. return result;
  111. #region 分批上传拓扑数据
  112. int count = 250;
  113. int index = listCriterias.Count / count;
  114. ThreadPool.SetMaxThreads(5, 5);
  115. for (int i = 0; i <= index; i++)
  116. {
  117. criteria.criterias = listCriterias.Skip(i * count).Take(count).ToList();
  118. ThreadPool.QueueUserWorkItem((data) => {
  119. string postData = JsonConvert.SerializeObject(data);
  120. RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
  121. result = result && restClient.GetRequest().IsSuccess();
  122. Logs.Debug("上传结果:" + result+"数据"+postData);},criteria);
  123. }
  124. int mod = listCriterias.Count % count;
  125. if (mod > 0)
  126. {
  127. criteria.criterias = listCriterias.Skip(index * count).Take(mod).ToList();
  128. string postData = JsonConvert.SerializeObject(criteria);
  129. Log4Net.Debug(postData);
  130. RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
  131. result = result && restClient.GetRequest().IsSuccess();
  132. Logs.Debug("上传结果:" + result+"数据"+postData);
  133. }
  134. #endregion
  135. return result;
  136. }
  137. }
  138. public class DescriptionRelatedAttribute : DescriptionAttribute
  139. {
  140. public DescriptionRelatedAttribute(string desc) : base(desc)
  141. {
  142. }
  143. public bool IsGplot { get; set; } = true;
  144. }
  145. public class ReleateData
  146. {
  147. public string from_id { get; set; }
  148. public string to_id { get; set; }
  149. public string graph_id { get; set; }
  150. public string rel_type { get; set; }
  151. public Info infos { get; set; }
  152. }
  153. public class Criteria
  154. {
  155. public List<ReleateData> criterias { get; set; }
  156. }
  157. public class Info
  158. {
  159. public string info1 { get; set; }
  160. public string info2 { get; set; }
  161. }
  162. }