You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
7.8KB

  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.Extensions.Logging;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel.DataAnnotations;
  8. using System.Linq;
  9. using System.Linq.Expressions;
  10. using System.Threading.Tasks;
  11. using HealthMonitor.Core.Aop;
  12. using HealthMonitor.Core.Cache;
  13. using HealthMonitor.Core.Dal;
  14. using HealthMonitor.Core.Dal.Factory;
  15. using HealthMonitor.Core.Operator;
  16. using HealthMonitor.Core.Query;
  17. using HealthMonitor.Core.Query.Extensions;
  18. using HealthMonitor.Util.Common;
  19. using HealthMonitor.Util.Common.Operator;
  20. using HealthMonitor.Util.Entities.Base;
  21. using HealthMonitor.Util.Models;
  22. using HealthMonitor.Util.QueryObjects;
  23. using HealthMonitor.WebApi.Filters;
  24. namespace HealthMonitor.WebApi.Controllers.Base
  25. {
  26. [Produces("application/json")]
  27. [Route("api/HealthMonitor/[controller]/[action]")]
  28. [ApiController]
  29. public abstract class HealthMonitorControllerBase<T> : DefaultControllerBase<T> where T : HealthMonitorEntityBase
  30. {
  31. //protected readonly GpsCardAccessorFactory _accessorFactory;
  32. //protected readonly IGpsCardDataAccessor _dataAccessor;
  33. //protected readonly IGpsCardOperatorManager _operatorGpsCardManager;
  34. protected readonly IHealthMonitorDataAccessor _dataAccessor;
  35. protected readonly IHealthMonitorOperatorManager _operatorManager;
  36. protected readonly IDurableEntityManager _durableManager;
  37. protected readonly ILogger _logger;
  38. protected HealthMonitorControllerBase(
  39. IHealthMonitorDataAccessor dataAccessor,
  40. //IGpsCardDataAccessor gpsCardDataAccessor,
  41. IHealthMonitorOperatorManager operatorGpsCardManager,
  42. IDurableEntityManager durableManager,
  43. ILogger logger)
  44. {
  45. _dataAccessor = dataAccessor;
  46. _operatorManager = operatorGpsCardManager;
  47. _durableManager = durableManager;
  48. _logger = logger;
  49. }
  50. /// <summary>
  51. /// 通过主键值,获取实体
  52. /// </summary>
  53. /// <param name="id"></param>
  54. /// <param name="requestId">关联服务标识</param>
  55. /// <returns></returns>
  56. [HttpGet]
  57. //[QueryCacheInterceptor]
  58. public async virtual Task<T> GetById([Required] string id, [FromHeader] string requestId)
  59. {
  60. AssertModelStateIsValid();
  61. //var key = EntityUtils.GetWrapKeyValue<T>(id);
  62. return await _dataAccessor.GetByIDAsync<T>(id);
  63. }
  64. /// <summary>
  65. /// 通过查询条件,获取符合条件的第一个实体
  66. /// </summary>
  67. /// <param name="conditions"></param>
  68. /// <param name="requestId">关联服务标识</param>
  69. /// <returns></returns>
  70. //[HttpPost]
  71. // //[QueryCacheInterceptor]
  72. // public async virtual Task<T?> GetFirst([FromBody] GeneralParam conditions, [FromHeader] string requestId)
  73. //{
  74. // AssertModelStateIsValid();
  75. // var parser = new QueryExpressionParser<T>();
  76. // var expression = parser.ParserConditions(conditions.Filters!);
  77. // var list = await _dataAccessor.GetMany(expression).OrderConditions(conditions.OrderBys!).Take(1).ToListAsync();
  78. // return list.Count > 0 ? list[0] : null;
  79. //}
  80. /// <summary>
  81. /// 获取实体列表(只提取符合条件的前100条记录)
  82. /// </summary>
  83. /// <param name="conditions"></param>
  84. /// <param name="requestId">关联服务标识</param>
  85. /// <returns></returns>
  86. [HttpPost]
  87. //[QueryCacheInterceptor]
  88. public async virtual Task<PageData<T>> GetPageList([FromBody] Paging page, [FromHeader] string requestId)
  89. {
  90. AssertModelStateIsValid();
  91. var all = _dataAccessor.GetAll<T>();
  92. var list = await all.Skip((page.CurPage - 1) * page.PageSize).Take(page.PageSize).ToListAsync();
  93. int totals = await all.CountAsync();
  94. return new PageData<T> { Totals= totals, Rows =list};
  95. }
  96. [HttpPost]
  97. public async virtual Task<IEnumerable<T>> GetList([FromBody] GeneralParam conditions, [FromHeader] string requestId)
  98. {
  99. /**
  100. * {
  101. "filters": [
  102. {
  103. "key": "id",
  104. "value": "aaa",
  105. "valueType": 7,
  106. "operator": 0
  107. }
  108. ],
  109. "orderBys": [
  110. {
  111. "key": "id",
  112. "isDesc": true
  113. }
  114. ]
  115. }
  116. *
  117. *
  118. *
  119. */
  120. AssertModelStateIsValid();
  121. var parser = new QueryExpressionParser<T>();
  122. var expression = parser.ParserConditions(conditions.Filters!);
  123. var aa = conditions.Filters!;
  124. var cc = await _dataAccessor.GetMany(expression).ToListAsync();
  125. var dd = conditions.OrderBys!;
  126. var list = await _dataAccessor.GetMany(expression).OrderConditions(conditions.OrderBys!).Take(100).ToListAsync();
  127. return list;
  128. }
  129. [HttpPost]
  130. public async virtual Task<IEnumerable<T>> GetPages([FromBody] GeneralParam conditions, [FromHeader] string requestId)
  131. {
  132. AssertModelStateIsValid();
  133. //var parser = new QueryExpressionParser<T>();
  134. //var expression = parser.ParserConditions(conditions.Filters!);
  135. // var aa = await _dataAccessor.GetPageListAsync(1,1, expression, conditions.OrderBys!);
  136. var parser = new QueryExpressionParser<T>();
  137. var expression = parser.ParserConditions(conditions.Filters!);
  138. var pageSize = 1;
  139. var pageIdx = 1;
  140. //var bb = await _dataAccessor.OrderBy(conditions.OrderBys!).Skip(pageSize * (pageIdx - 1)).Take(pageSize);
  141. var list = await _dataAccessor.GetAll<T>().OrderConditions(conditions.OrderBys!).Skip(pageSize * (pageIdx - 1)).Take(pageSize).ToListAsync();
  142. return list;
  143. }
  144. /// <summary>
  145. /// Insert实体
  146. /// </summary>
  147. /// <param name="model"></param>
  148. /// <param name="requestId">关联服务标识</param>
  149. [HttpPost]
  150. //[InsertCacheInterceptor]
  151. public virtual void Add([FromBody] T model, [FromHeader] string requestId)
  152. {
  153. AssertModelStateIsValid(model);
  154. _dataAccessor.Add(model);
  155. _dataAccessor.Save();
  156. }
  157. /// <summary>
  158. /// Update实体
  159. /// </summary>
  160. /// <param name="model"></param>
  161. /// <param name="requestId">关联服务标识</param>
  162. [HttpPut]
  163. //[UpdateCacheInterceptor]
  164. public virtual void Update([FromBody] T model, [FromHeader] string requestId)
  165. {
  166. AssertModelStateIsValid(model);
  167. //_dataAccessor.GetByIDAsync<T>(model.GetPrimaryKey());
  168. _dataAccessor.Update(model);
  169. _dataAccessor.Save();
  170. //var item = new OperateCacheItem
  171. //{
  172. // Type = DelayOperateTypeEnum.Update,
  173. // CreateTime = DateTime.Now,
  174. // EntityType = typeof(T),
  175. // JsonData = JsonConvert.SerializeObject(model)
  176. //};
  177. //_operatorManager.Append(model.GetRequiredUniqueKey(), item);
  178. }
  179. /// <summary>
  180. /// Delete实体
  181. /// </summary>
  182. /// <param name="model"></param>
  183. /// <param name="requestId">关联服务标识</param>
  184. [HttpDelete]
  185. //[DeleteCacheInterceptor]
  186. public virtual void Delete([FromBody] T model, [FromHeader] string requestId)
  187. {
  188. //删除操作不需要验证模型的有效性
  189. //AssertModelStateIsValid();
  190. _dataAccessor.Delete(model);
  191. _dataAccessor.Save();
  192. //var item = new OperateCacheItem
  193. //{
  194. // Type = DelayOperateTypeEnum.Delete,
  195. // CreateTime = DateTime.Now,
  196. // EntityType = typeof(T),
  197. // JsonData = JsonConvert.SerializeObject(model),
  198. //};
  199. //_operatorManager.Append(model.GetRequiredUniqueKey(), item);
  200. }
  201. }
  202. }