SchemaRepository.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using CZFW.Framework.Model.ViewModel;
  2. using CZFW.MDB.Util;
  3. using MongoDB.Bson;
  4. using MongoDB.Driver;
  5. using Newtonsoft.Json.Linq;
  6. using System;
  7. namespace CZFW.MDB
  8. {
  9. public class SchemaRepository : ISchemaRepository
  10. {
  11. IMongoRepository _repository;
  12. string schemaTableName = "schema";
  13. public SchemaRepository(IMongoRepository rep)
  14. {
  15. _repository = rep;
  16. _repository.SetCurrentTable(schemaTableName);
  17. }
  18. public IMongoCollection<BsonDocument> GetCurrentTable()
  19. {
  20. return _repository.CurrentTable;
  21. }
  22. public ResultModel Create(string tplId, string objJson)
  23. {
  24. var obj = JObject.Parse(objJson);
  25. string name = obj.GetValue("name").ToString();
  26. if (!string.IsNullOrWhiteSpace(tplId))
  27. {
  28. obj.Add(Constants.TPL_NAME_FIELD, tplId);
  29. name = $"{tplId}_{name}";
  30. obj["name"] = name;
  31. }
  32. objJson = obj.ToString();
  33. //if (_repository.TableExists(name))
  34. // return new ResultModel("同名的表已经存在系统中");
  35. _repository.SetCurrentTable(schemaTableName);
  36. var tp = _repository.Insert(objJson);
  37. if (tp.Success)
  38. {
  39. var tp2 = _repository.CreateTable(name);
  40. return tp2;
  41. }
  42. else
  43. return tp;
  44. }
  45. public BsonDocument GetHeader(string key, string type, out string name)
  46. {
  47. var data = _repository.Get(key).CZToJson();
  48. var jobj = JObject.Parse(data);
  49. name = jobj.GetValue("name").ToString();
  50. var backEndTableTpl = jobj.SelectToken($"template.{type}").ToString();
  51. var bson = BsonDocument.Parse(backEndTableTpl);
  52. return bson;
  53. }
  54. public BsonDocument GetHeaderByName(string name, string type, out string id)
  55. {
  56. var data = GetByName(name).CZToJson();
  57. var jobj = JObject.Parse(data);
  58. id = jobj.GetValue("_id").ToString();
  59. var backEndTableTpl = jobj.SelectToken($"template.{type}").ToString();
  60. var bson = BsonDocument.Parse(backEndTableTpl);
  61. return bson;
  62. }
  63. public BsonDocument GetByName(string name, string projection = "{}")
  64. {
  65. var filter = new BsonDocument("name", name);
  66. var res = _repository.CurrentTable.Find(filter).Project(projection).FirstOrDefault();
  67. return res;
  68. }
  69. public string GetIdByName(string name)
  70. {
  71. var data = _repository.GetList($"{{name:\"{name}\"}}", "{_id:1}");
  72. if (data.Count > 0)
  73. {
  74. return data[0]["_id"].ToString();
  75. }
  76. return null;
  77. }
  78. public string GetNameById(string key)
  79. {
  80. var schema = _repository.Get(key, "{name:1}");
  81. var name = schema["name"].AsString;
  82. return name;
  83. }
  84. public BsonDocument GetSchema(string key)
  85. {
  86. var res = _repository.Get(key);
  87. return res;
  88. }
  89. public BsonDocument GetSchemaByName(string name)
  90. {
  91. throw new NotImplementedException();
  92. }
  93. public BsonArray GetSchemaList(string tplId, string query = "{}",string proj= "{name:1, title:1,max_page_number:1,page_type:1,icon:1,sort_order:1}", int pageIndex = 1, int pageSize = 100, string sort = "{}")
  94. {
  95. var qry = JObject.Parse(query);
  96. qry.Add(Constants.TPL_NAME_FIELD, tplId);
  97. query = qry.ToString();
  98. var projection = proj;
  99. var res = _repository.GetList(query, projection, pageIndex, pageSize, sort);
  100. return res;
  101. }
  102. public BsonDocument GetOne(string tplId, string query = "{}", string proj = "{name:1, title:1,max_page_number:1,page_type:1,icon:1}",string sort = "{}")
  103. {
  104. var qry = JObject.Parse(query);
  105. qry.Add(Constants.TPL_NAME_FIELD, tplId);
  106. query = qry.ToString();
  107. var projection = proj;
  108. var res = _repository.GetOne(query, projection, sort);
  109. return res;
  110. }
  111. public ResultModel Remove(string key)
  112. {
  113. _repository.SetCurrentTable(schemaTableName);
  114. var table = _repository.Get(key);
  115. var tableName = table.GetFieldValue("name").AsString;
  116. if (tableName != null)
  117. {
  118. var tp = _repository.RemoveTable(tableName);
  119. }
  120. var res = _repository.Remove(key);
  121. return res;
  122. }
  123. public ResultModel Replace(string key, string objJson)
  124. {
  125. _repository.SetCurrentTable(schemaTableName);
  126. var res = _repository.Replace(key, objJson);
  127. return res;
  128. }
  129. //public ResultModel Update(string key, string objJson)
  130. //{
  131. // throw new NotImplementedException();
  132. //}
  133. public BsonDocument GetSchemaField(string qry, string prj)
  134. {
  135. _repository.SetCurrentTable(schemaTableName);
  136. var res = _repository.GetList(qry, prj, 1, 1);
  137. if (res.Count > 0)
  138. return res.ToList()[0].AsBsonDocument;
  139. else
  140. return BsonDocument.Parse("{}");
  141. }
  142. }
  143. }