MongoDbGatherDataManager.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using AIPlatform.Protocol.Entities;
  2. using AIPlatform.Protocol.Model;
  3. using MongoDB.Driver;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. namespace aipsvr.Services.DatabaseManagers.MongoDb
  9. {
  10. internal class MongoDbGatherDataManager : IGatherDataManager
  11. {
  12. #region GatherCategory
  13. /// <summary>
  14. /// 创建采集分类
  15. /// </summary>
  16. /// <param name="gatherCategory"></param>
  17. /// <returns></returns>
  18. public async Task CreateGatherCategoryAsync(GatherCategory gatherCategory)
  19. {
  20. await MongoDbClient.Instance.GatherCategories.InsertOneAsync(gatherCategory);
  21. }
  22. /// <summary>
  23. /// 更新采集分类
  24. /// </summary>
  25. /// <param name="gatherCategory"></param>
  26. /// <returns></returns>
  27. public async Task UpdateGatherCategoryAsync(GatherCategory gatherCategory)
  28. {
  29. var update = Builders<GatherCategory>.Update.Set(x => x.UpdateTime, DateTime.UtcNow)
  30. .Set(x => x.Name, gatherCategory.Name)
  31. .Set(x => x.Organization, gatherCategory.Organization)
  32. .Set(x => x.Gatherers, gatherCategory.Gatherers);
  33. await MongoDbClient.Instance.GatherCategories.FindOneAndUpdateAsync(x => x.Id == gatherCategory.Id, update);
  34. }
  35. /// <summary>
  36. /// 根据id获取采集分类
  37. /// </summary>
  38. /// <param name="id"></param>
  39. /// <returns></returns>
  40. public async Task<GatherCategory> GetGatherCategoryByIdAsync(long id)
  41. {
  42. var result = await MongoDbClient.Instance.GatherCategories.FindAsync(x => x.IsDeleted == false && x.Id == id);
  43. return await result.FirstOrDefaultAsync();
  44. }
  45. public async Task<List<GatherCategory>> GetGatherCategoriesByOrganizationIdAsync(long organizationId)
  46. {
  47. var filters = Builders<GatherCategory>.Filter.Where(x => x.IsDeleted == false && x.Organization.Id == organizationId);
  48. return await MongoDbClient.Instance.GatherCategories.Find(filters)
  49. .SortByDescending(x => x.UpdateTime)
  50. .ToListAsync();
  51. }
  52. /// <summary>
  53. /// 根据name获取采集分类
  54. /// </summary>
  55. /// <param name="name"></param>
  56. /// <returns></returns>
  57. public async Task<GatherCategory> GetGatherCategoryByNameAsync(string name, long organizationId)
  58. {
  59. var result = await MongoDbClient.Instance.GatherCategories.FindAsync(x => x.IsDeleted == false && x.Organization.Id == organizationId && x.Name == name);
  60. return await result.FirstOrDefaultAsync();
  61. }
  62. /// <summary>
  63. /// 获取采集分类
  64. /// </summary>
  65. /// <param name="pageIndex"></param>
  66. /// <param name="pageSize"></param>
  67. /// <param name="searchGatherCategoryModel"></param>
  68. /// <returns></returns>
  69. public async Task<List<GatherCategory>> GetGatherCategoriesAsync(int pageIndex, int pageSize, SearchGatherCategoryModel searchGatherCategoryModel)
  70. {
  71. var filters = Builders<GatherCategory>.Filter.Where(x => x.IsDeleted == false && x.Organization.Id == searchGatherCategoryModel.OrganizationId);
  72. if (!string.IsNullOrEmpty(searchGatherCategoryModel.Name))
  73. {
  74. filters &= Builders<GatherCategory>.Filter.Where(x => x.Name.ToLower().Contains(searchGatherCategoryModel.Name.ToLower()));
  75. }
  76. if (!string.IsNullOrEmpty(searchGatherCategoryModel.GathererName))
  77. {
  78. filters &= Builders<GatherCategory>.Filter.Where(x => x.Gatherers.Any(y => y.Name.ToLower().Contains(searchGatherCategoryModel.GathererName.ToLower())));
  79. }
  80. return await MongoDbClient.Instance.GatherCategories.Find(filters)
  81. .SortByDescending(x => x.UpdateTime)
  82. .Skip(pageIndex * pageSize)
  83. .Limit(pageSize)
  84. .ToListAsync();
  85. }
  86. /// <summary>
  87. /// 获取采集分类
  88. /// </summary>
  89. /// <param name="searchGatherCategoryModel"></param>
  90. /// <returns></returns>
  91. public async Task<long> GetGatherCategoriesCountAsync(SearchGatherCategoryModel searchGatherCategoryModel)
  92. {
  93. var filters = Builders<GatherCategory>.Filter.Where(x => x.IsDeleted == false && x.Organization.Id == searchGatherCategoryModel.OrganizationId);
  94. if (!string.IsNullOrEmpty(searchGatherCategoryModel.Name))
  95. {
  96. filters &= Builders<GatherCategory>.Filter.Where(x => x.Name.ToLower().Contains(searchGatherCategoryModel.Name.ToLower()));
  97. }
  98. if (!string.IsNullOrEmpty(searchGatherCategoryModel.GathererName))
  99. {
  100. filters &= Builders<GatherCategory>.Filter.Where(x => x.Gatherers.Any(y => y.Name.ToLower().Contains(searchGatherCategoryModel.GathererName.ToLower())));
  101. }
  102. return await MongoDbClient.Instance.GatherCategories.CountDocumentsAsync(filters);
  103. }
  104. #endregion GatherCategory
  105. #region GatherData
  106. /// <summary>
  107. /// 创建采集数据
  108. /// </summary>
  109. /// <param name="gatherData"></param>
  110. /// <returns></returns>
  111. public async Task CreateGatherDataAsync(GatherData gatherData)
  112. {
  113. await MongoDbClient.Instance.GatherDatas.InsertOneAsync(gatherData);
  114. }
  115. /// <summary>
  116. /// 更新采集数据
  117. /// </summary>
  118. /// <param name="gatherData"></param>
  119. /// <returns></returns>
  120. public async Task UpdateGatherDataAsync(GatherData gatherData)
  121. {
  122. var update = Builders<GatherData>.Update.Set(x => x.UpdateTime, DateTime.UtcNow)
  123. .Set(x => x.Category, gatherData.Category)
  124. .Set(x => x.Organization, gatherData.Organization)
  125. .Set(x => x.Gatherer, gatherData.Gatherer)
  126. .Set(x => x.ModelType, gatherData.ModelType)
  127. .Set(x => x.Source, gatherData.Source)
  128. .Set(x => x.CollectionQuantity, gatherData.CollectionQuantity)
  129. .Set(x => x.StartTime, gatherData.StartTime.ToUniversalTime())
  130. .Set(x => x.EndTime, gatherData.EndTime.ToUniversalTime())
  131. .Set(x => x.SettlementTime, gatherData.SettlementTime.ToUniversalTime());
  132. await MongoDbClient.Instance.GatherDatas.FindOneAndUpdateAsync(x => x.Id == gatherData.Id, update);
  133. }
  134. /// <summary>
  135. /// 根据id获取采集数据
  136. /// </summary>
  137. /// <param name="id"></param>
  138. /// <returns></returns>
  139. public async Task<GatherData> GetGatherDataByIdAsync(long id)
  140. {
  141. var result = await MongoDbClient.Instance.GatherDatas.FindAsync(x => x.IsDeleted == false && x.Id == id);
  142. return await result.FirstOrDefaultAsync();
  143. }
  144. /// <summary>
  145. /// 获取采集数据
  146. /// </summary>
  147. /// <param name="pageIndex"></param>
  148. /// <param name="pageSize"></param>
  149. /// <param name="searchGatherDataModel"></param>
  150. /// <returns></returns>
  151. public async Task<List<GatherData>> GetGatherDatasAsync(int pageIndex, int pageSize, SearchGatherDataModel searchGatherDataModel)
  152. {
  153. var filters = Builders<GatherData>.Filter.Where(x => x.IsDeleted == false && x.Organization.Id == searchGatherDataModel.OrganizationId);
  154. if (!string.IsNullOrEmpty(searchGatherDataModel.Name))
  155. {
  156. filters &= Builders<GatherData>.Filter.Where(x => x.Category.Name.ToLower().Contains(searchGatherDataModel.Name.ToLower()));
  157. }
  158. if (!string.IsNullOrEmpty(searchGatherDataModel.GathererName))
  159. {
  160. filters &= Builders<GatherData>.Filter.Where(x => x.Gatherer.Name.ToLower().Contains(searchGatherDataModel.GathererName.ToLower()));
  161. }
  162. if (!string.IsNullOrEmpty(searchGatherDataModel.ModelType))
  163. {
  164. filters &= Builders<GatherData>.Filter.Where(x => x.ModelType.ToLower().Contains(searchGatherDataModel.ModelType.ToLower()));
  165. }
  166. if (!string.IsNullOrEmpty(searchGatherDataModel.Source))
  167. {
  168. filters &= Builders<GatherData>.Filter.Where(x => x.Source.ToLower().Contains(searchGatherDataModel.Source.ToLower()));
  169. }
  170. if (searchGatherDataModel.SettleStartTime != null && searchGatherDataModel.SettleEndTime != null && searchGatherDataModel.SettleStartTime <= searchGatherDataModel.SettleEndTime)
  171. {
  172. filters &= Builders<GatherData>.Filter.Where(x => x.SettlementTime >= searchGatherDataModel.SettleStartTime.Value.ToUniversalTime() && x.SettlementTime <= searchGatherDataModel.SettleEndTime.Value.ToUniversalTime());
  173. }
  174. return await MongoDbClient.Instance.GatherDatas.Find(filters)
  175. .SortByDescending(x => x.UpdateTime)
  176. .Skip(pageIndex * pageSize)
  177. .Limit(pageSize)
  178. .ToListAsync();
  179. }
  180. /// <summary>
  181. /// 获取采集数据数量
  182. /// </summary>
  183. /// <param name="searchGatherDataModel"></param>
  184. /// <returns></returns>
  185. public async Task<long> GetGatherDatasCountAsync(SearchGatherDataModel searchGatherDataModel)
  186. {
  187. var filters = Builders<GatherData>.Filter.Where(x => x.IsDeleted == false && x.Organization.Id == searchGatherDataModel.OrganizationId);
  188. if (!string.IsNullOrEmpty(searchGatherDataModel.Name))
  189. {
  190. filters &= Builders<GatherData>.Filter.Where(x => x.Category.Name.ToLower().Contains(searchGatherDataModel.Name.ToLower()));
  191. }
  192. if (!string.IsNullOrEmpty(searchGatherDataModel.GathererName))
  193. {
  194. filters &= Builders<GatherData>.Filter.Where(x => x.Gatherer.Name.ToLower().Contains(searchGatherDataModel.GathererName.ToLower()));
  195. }
  196. if (!string.IsNullOrEmpty(searchGatherDataModel.ModelType))
  197. {
  198. filters &= Builders<GatherData>.Filter.Where(x => x.ModelType.ToLower().Contains(searchGatherDataModel.ModelType.ToLower()));
  199. }
  200. if (!string.IsNullOrEmpty(searchGatherDataModel.Source))
  201. {
  202. filters &= Builders<GatherData>.Filter.Where(x => x.Source.ToLower().Contains(searchGatherDataModel.Source.ToLower()));
  203. }
  204. if (searchGatherDataModel.SettleStartTime != null && searchGatherDataModel.SettleEndTime != null && searchGatherDataModel.SettleStartTime <= searchGatherDataModel.SettleEndTime)
  205. {
  206. filters &= Builders<GatherData>.Filter.Where(x => x.SettlementTime >= searchGatherDataModel.SettleStartTime.Value.ToUniversalTime() && x.SettlementTime <= searchGatherDataModel.SettleEndTime.Value.ToUniversalTime());
  207. }
  208. return await MongoDbClient.Instance.GatherDatas.CountDocumentsAsync(filters);
  209. }
  210. /// <summary>
  211. /// Get Gather Datas by Category Id
  212. /// </summary>
  213. /// <param name="categoryId"></param>
  214. /// <returns></returns>
  215. public async Task<List<GatherData>> GetGatherDatasByCategoryIdAsync(long categoryId)
  216. {
  217. var filters = Builders<GatherData>.Filter.Where(x => x.IsDeleted == false && x.Category.Id == categoryId);
  218. return await MongoDbClient.Instance.GatherDatas.Find(filters).SortByDescending(x => x.UpdateTime).ToListAsync();
  219. }
  220. #endregion GatherData
  221. }
  222. }