RelationUploader.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using SAGA.GplotRelationComputerManage;
  4. using SAGA.MBI.RequestData;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using SAGA.DotNetUtils.Extend;
  11. namespace SAGA.GplotManage
  12. {
  13. public abstract class RelationUploader:IRelationUploader
  14. {
  15. public RelationUploader(string relationType,string relationDisplay)
  16. {
  17. RelationType = relationType;
  18. RelationDisplay = relationDisplay;
  19. }
  20. /*
  21. *可以将计算写在upload中,就像把计算卸载Show中
  22. */
  23. /// <summary>
  24. /// 图关系类型
  25. /// </summary>
  26. public string RelationType { get;private set; }
  27. /// <summary>
  28. /// 图关系显示名称
  29. /// </summary>
  30. public string RelationDisplay { get; private set; }
  31. /// <summary>
  32. /// 上传图关系
  33. /// </summary>
  34. public virtual void Upload()
  35. {
  36. var data = GetDefaultUploadData();
  37. Upload(data);
  38. }
  39. protected abstract object GetDefaultUploadData();
  40. /// <summary>
  41. /// 上传图关系
  42. /// </summary>
  43. /// <param name="loadData"></param>
  44. public virtual void Upload(object loadData)
  45. {
  46. var items = CreateGraph(loadData);
  47. UploadGraph(items);
  48. }
  49. /// <summary>
  50. /// 创建图关系集合
  51. /// </summary>
  52. /// <param name="loadData"></param>
  53. /// <returns></returns>
  54. protected abstract List<GraphRelationItem> CreateGraph(object loadData);
  55. public virtual void UploadGraph(List<GraphRelationItem> realtionItems)
  56. {
  57. string graphId = RelationRequest.GetCurrentGraphId(RelationType);
  58. if (graphId == null) return;
  59. if (realtionItems != null)
  60. {
  61. realtionItems.ForEach(r => r.GraphId = graphId);
  62. }
  63. #region 删除拓扑关系
  64. var deleteObject = new JObject();
  65. var deleteArray = new JArray();
  66. var deleteCondition = new JObject();
  67. deleteCondition.Add("graph_id", graphId);
  68. deleteArray.Add(deleteCondition);
  69. deleteObject.Add("criterias", deleteArray);
  70. RelationRequest.DeleteRelation(deleteObject);
  71. #endregion
  72. if (realtionItems!=null&&realtionItems.Any())
  73. {
  74. var blocks = realtionItems.SplitBlock(10000);
  75. foreach (var block in blocks)
  76. {
  77. //var jarry = JArray.FromObject(realtionItems);
  78. var jarry = JArray.FromObject(block);
  79. JObject jobject = new JObject();
  80. jobject.Add("criterias", jarry);
  81. var result = RelationRequest.AddRelation(jobject);
  82. if (!result)
  83. {
  84. throw new Exception("创建关系失败");
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }