| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Threading;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using SAGA.DotNetUtils.Http;
- using SAGA.DotNetUtils.Logger;
- using SAGA.MBI.Common;
- using SAGA.Models;
- namespace SAGA.GplotManage
- {
- public class RelatedDataUpload
- {
- //二级Url
- private static string m_sUrl = "data-platform-3/relation/";
- private static string m_baseUrl = $"{ MBIConst.DataPlatformLocalHost}{m_sUrl}";
- private static string m_userPwd = $"projectId={MBIControl.ProjectCur.Id}&secret={MBIControl.ProjectCur.Password}";
- /// <summary>
- /// 创建图实例
- /// </summary>
- /// <param name="graphType">图类型</param>
- /// <returns></returns>
- public static string CreateGraphInstance(GraphTypeEnum graphType, string begin_time)
- {
- return CreateGraphInstance(graphType + "", begin_time);
- }
- /// <summary>
- /// 创建图实例
- /// </summary>
- /// <param name="graphType">图类型</param>
- /// <returns></returns>
- public static string CreateGraphInstance(string graphType, string begin_time)
- {
- string url = $"{m_baseUrl}graph_instance/create?{m_userPwd}";
- // string postData = $"{{\"graph_type\":\"{graphType}\"}}";
- string postData = $"{{\"graph_type\":\"{graphType}\",\"periods\":[{{\"begin_time\":\"{begin_time}\",\"end_time\":\"29000101000000\"}}]}}";
- RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
- return restClient.GetRequest().GetValue("graph_id");
- }
- /// <summary>
- /// 查询图实例(如果当前时间点与最新的节点有重复,
- /// 修改之前的图实例时间,然后创建新的,20171123)
- /// 默认过期时间段是不存在的,所以当前只会存在一个图实例
- /// </summary>
- /// <param name="graphType">图类型</param>
- /// <returns></returns>
- public static string QueryGraphInstance(GraphTypeEnum graphType)
- {
- string url = $"{m_baseUrl}graph_instance/query?{m_userPwd}";
- string postData = $"{{\"graph_type\":\"{graphType}\"}}";
- postData = $"{{\"criteria\":{{\"graph_type\":\"{graphType}\"}}}}";
- RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
- return restClient.GetRequest();
- }
- /// <summary>
- /// 根据图类型获取图实例id
- /// </summary>
- /// <param name="graphType"></param>
- /// <returns></returns>
- public static string QueryGraphInstance(string graphType)
- {
- string url = $"{m_baseUrl}graph_instance/query?{m_userPwd}";
- string postData = $"{{\"graph_type\":\"{graphType}\"}}";
- postData = $"{{\"criteria\":{{\"graph_type\":\"{graphType}\"}}}}";
- RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
- return restClient.GetRequest();
- }
- /// <summary>
- /// 修改实例(如果当前时间点与最新的节点有重复,
- /// 修改之前的图实例时间,然后创建新的,20171123)
- /// </summary>
- /// <param name="graphId">图类型</param>
- /// <param name="statrDateTime"></param>
- /// <param name="endDateTime"></param>
- /// <returns></returns>
- public static string UpdateGraphInstance(string graphId, string statrDateTime, string endDateTime)
- {
- string url = $"{m_baseUrl}graph_instance/update?{m_userPwd}";
- string postData = $"{{\"criteria\":{{\"graph_id\":\"{graphId}\"}},\"set\":{{\"periods\":[{{\"begin_time\":\"{statrDateTime}\",\"end_time\":\"{endDateTime}\"}}]}}}}";
- RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
- return restClient.GetRequest().GetValue("graph_id");
- }
- /// <summary>
- /// 关系类型上传
- /// </summary>
- /// <param name="criteria">关系数据</param>
- /// <returns></returns>
- public static bool CreateRelation(Criteria criteria)
- {
- string url = $"{m_baseUrl}create?{m_userPwd}";
- var listCriterias = new List<ReleateData>();
- //移除设备云端ID为空的设备,空Id禁止上传
- for (int i = criteria.criterias.Count - 1; i >= 0; i--)
- {
- if (string.IsNullOrEmpty(criteria.criterias[i].from_id) ||string.IsNullOrEmpty( criteria.criterias[i].to_id ))
- {
- criteria.criterias.RemoveAt(i);
- }
- }
- if (criteria.criterias.Count == 0) return false;
- listCriterias.AddRange(criteria.criterias);
- var result = true;
- string postData2 = JsonConvert.SerializeObject(listCriterias);
- JObject jobject = new JObject();
- jobject.Add("criterias", JArray.FromObject(listCriterias));
- RestClient restClient1 = new RestClient(url, HttpVerb.POST, JsonConvert.SerializeObject(jobject).ToString());
- result = result && restClient1.GetRequest().IsSuccess();
- return result;
- #region 分批上传拓扑数据
-
- int count = 250;
- int index = listCriterias.Count / count;
-
- ThreadPool.SetMaxThreads(5, 5);
-
- for (int i = 0; i <= index; i++)
- {
- criteria.criterias = listCriterias.Skip(i * count).Take(count).ToList();
- ThreadPool.QueueUserWorkItem((data) => {
- string postData = JsonConvert.SerializeObject(data);
-
- RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
- result = result && restClient.GetRequest().IsSuccess();
- Logs.Debug("上传结果:" + result+"数据"+postData);},criteria);
- }
- int mod = listCriterias.Count % count;
- if (mod > 0)
- {
- criteria.criterias = listCriterias.Skip(index * count).Take(mod).ToList();
- string postData = JsonConvert.SerializeObject(criteria);
- Log4Net.Debug(postData);
- RestClient restClient = new RestClient(url, HttpVerb.POST, postData);
- result = result && restClient.GetRequest().IsSuccess();
- Logs.Debug("上传结果:" + result+"数据"+postData);
- }
- #endregion
- return result;
- }
- }
- public class DescriptionRelatedAttribute : DescriptionAttribute
- {
- public DescriptionRelatedAttribute(string desc) : base(desc)
- {
- }
- public bool IsGplot { get; set; } = true;
- }
- public class ReleateData
- {
- public string from_id { get; set; }
- public string to_id { get; set; }
- public string graph_id { get; set; }
- public string rel_type { get; set; }
- public Info infos { get; set; }
- }
- public class Criteria
- {
- public List<ReleateData> criterias { get; set; }
- }
- public class Info
- {
- public string info1 { get; set; }
- public string info2 { get; set; }
- }
- }
|