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.

209 lines
7.4KB

  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. using IoTSharp.Data.Taos;
  25. namespace HealthMonitor.WebApi.Controllers.Base
  26. {
  27. [Produces("application/json")]
  28. [Route("api/HealthMonitor/[controller]/[action]")]
  29. [ApiController]
  30. public abstract class HealthMonitorControllerBase<T> : DefaultControllerBase<T> where T : HealthMonitorEntityBase
  31. {
  32. //protected readonly GpsCardAccessorFactory _accessorFactory;
  33. //protected readonly IGpsCardDataAccessor _dataAccessor;
  34. //protected readonly IGpsCardOperatorManager _operatorGpsCardManager;
  35. protected readonly IHealthMonitorDataAccessor _dataAccessor;
  36. protected readonly IHealthMonitorOperatorManager _operatorManager;
  37. protected readonly IDurableEntityManager _durableManager;
  38. protected readonly ILogger _logger;
  39. protected HealthMonitorControllerBase(
  40. IHealthMonitorDataAccessor dataAccessor,
  41. //IGpsCardDataAccessor gpsCardDataAccessor,
  42. IHealthMonitorOperatorManager operatorGpsCardManager,
  43. IDurableEntityManager durableManager,
  44. ILogger logger)
  45. {
  46. _dataAccessor = dataAccessor;
  47. _operatorManager = operatorGpsCardManager;
  48. _durableManager = durableManager;
  49. _logger = logger;
  50. }
  51. /// <summary>
  52. /// 通过主键值,获取实体
  53. /// </summary>
  54. /// <param name="id"></param>
  55. /// <param name="requestId">关联服务标识</param>
  56. /// <returns></returns>
  57. [HttpGet]
  58. //[QueryCacheInterceptor]
  59. public async virtual Task<T> GetById([Required] string id, [FromHeader] string requestId)
  60. {
  61. AssertModelStateIsValid();
  62. //var key = EntityUtils.GetWrapKeyValue<T>(id);
  63. return await _dataAccessor.GetByIDAsync<T>(id);
  64. }
  65. /// <summary>
  66. /// 通过查询条件,获取符合条件的第一个实体
  67. /// </summary>
  68. /// <param name="conditions"></param>
  69. /// <param name="requestId">关联服务标识</param>
  70. /// <returns></returns>
  71. [HttpPost]
  72. //[QueryCacheInterceptor]
  73. public async virtual Task<T?> GetFirst([FromBody] GeneralParam conditions, [FromHeader] string requestId)
  74. {
  75. AssertModelStateIsValid();
  76. var parser = new QueryExpressionParser<T>();
  77. var expression = parser.ParserConditions(conditions.Filters!);
  78. var list = await _dataAccessor.GetMany(expression).OrderConditions(conditions.OrderBys!).Take(1).ToListAsync();
  79. return list.Count > 0 ? list[0] : null;
  80. }
  81. /// <summary>
  82. /// 获取实体列表(只提取符合条件的前100条记录)
  83. /// </summary>
  84. /// <param name="conditions"></param>
  85. /// <param name="requestId">关联服务标识</param>
  86. /// <returns></returns>
  87. [HttpPost]
  88. //[QueryCacheInterceptor]
  89. public async virtual Task<PageData<T>> GetPageList([FromBody] Paging page, [FromHeader] string requestId)
  90. {
  91. AssertModelStateIsValid();
  92. var all = _dataAccessor.GetAll<T>();
  93. var list = await all.Skip((page.CurPage - 1) * page.PageSize).Take(page.PageSize).ToListAsync();
  94. int totals = await all.CountAsync();
  95. return new PageData<T> { Totals= totals, Rows =list};
  96. }
  97. [HttpPost]
  98. public async virtual Task<IEnumerable<T>> GetList([FromBody] GeneralParam conditions, [FromHeader] string requestId)
  99. {
  100. AssertModelStateIsValid();
  101. var parser = new QueryExpressionParser<T>();
  102. var expression = parser.ParserConditions(conditions.Filters!);
  103. var list = await _dataAccessor.GetMany(expression).OrderConditions(conditions.OrderBys!).Take(100).ToListAsync();
  104. return list;
  105. }
  106. [HttpPost]
  107. public async virtual Task<IEnumerable<T>> GetPages([FromBody] GeneralParam conditions, [FromHeader] string requestId)
  108. {
  109. AssertModelStateIsValid();
  110. //var parser = new QueryExpressionParser<T>();
  111. //var expression = parser.ParserConditions(conditions.Filters!);
  112. // var aa = await _dataAccessor.GetPageListAsync(1,1, expression, conditions.OrderBys!);
  113. //var parser = new QueryExpressionParser<T>();
  114. //var expression = parser.ParserConditions(conditions.Filters!);
  115. var pageSize = 1;
  116. var pageIdx = 1;
  117. //var bb = await _dataAccessor.OrderBy(conditions.OrderBys!).Skip(pageSize * (pageIdx - 1)).Take(pageSize);
  118. var list = await _dataAccessor.GetAll<T>().OrderConditions(conditions.OrderBys!).Skip(pageSize * (pageIdx - 1)).Take(pageSize).ToListAsync();
  119. return list;
  120. }
  121. /// <summary>
  122. /// Insert实体
  123. /// </summary>
  124. /// <param name="model"></param>
  125. /// <param name="requestId">关联服务标识</param>
  126. [HttpPost]
  127. //[InsertCacheInterceptor]
  128. public virtual void Add([FromBody] T model, [FromHeader] string requestId)
  129. {
  130. AssertModelStateIsValid(model);
  131. _dataAccessor.Add(model);
  132. _dataAccessor.Save();
  133. }
  134. /// <summary>
  135. /// Update实体
  136. /// </summary>
  137. /// <param name="model"></param>
  138. /// <param name="requestId">关联服务标识</param>
  139. [HttpPut]
  140. //[UpdateCacheInterceptor]
  141. public virtual void Update([FromBody] T model, [FromHeader] string requestId)
  142. {
  143. AssertModelStateIsValid(model);
  144. //_dataAccessor.GetByIDAsync<T>(model.GetPrimaryKey());
  145. _dataAccessor.Update(model);
  146. _dataAccessor.Save();
  147. //var item = new OperateCacheItem
  148. //{
  149. // Type = DelayOperateTypeEnum.Update,
  150. // CreateTime = DateTime.Now,
  151. // EntityType = typeof(T),
  152. // JsonData = JsonConvert.SerializeObject(model)
  153. //};
  154. //_operatorManager.Append(model.GetRequiredUniqueKey(), item);
  155. }
  156. /// <summary>
  157. /// Delete实体
  158. /// </summary>
  159. /// <param name="model"></param>
  160. /// <param name="requestId">关联服务标识</param>
  161. [HttpDelete]
  162. //[DeleteCacheInterceptor]
  163. public virtual void Delete([FromBody] T model, [FromHeader] string requestId)
  164. {
  165. //删除操作不需要验证模型的有效性
  166. //AssertModelStateIsValid();
  167. _dataAccessor.Delete(model);
  168. _dataAccessor.Save();
  169. //var item = new OperateCacheItem
  170. //{
  171. // Type = DelayOperateTypeEnum.Delete,
  172. // CreateTime = DateTime.Now,
  173. // EntityType = typeof(T),
  174. // JsonData = JsonConvert.SerializeObject(model),
  175. //};
  176. //_operatorManager.Append(model.GetRequiredUniqueKey(), item);
  177. }
  178. }
  179. }