|
- using HealthMonitor.Core.Aop;
- using HealthMonitor.Core.Cache;
- using HealthMonitor.Core.Dal;
- using HealthMonitor.Core.Operator;
- using HealthMonitor.Core.Query;
- using HealthMonitor.Core.Query.Extensions;
- using HealthMonitor.Util.Common.Operator;
- using HealthMonitor.Util.Entities.Base;
- using HealthMonitor.Util.Models;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.EntityFrameworkCore;
- using Newtonsoft.Json;
- using System.ComponentModel.DataAnnotations;
-
- namespace HealthMonitor.WebApi.Controllers.Base
- {
- [Produces("application/json")]
- [Route("api/GpsCard/[controller]/[action]")]
- [ApiController]
- public abstract class GpsCardControllerBase<T> : DefaultControllerBase<T> where T : GpsCardEntityBase
- {
- //protected readonly GpsCardAccessorFactory _accessorFactory;
- protected readonly IGpsCardDataAccessor _dataAccessor;
- protected readonly IGpsCardOperatorManager _operatorManager;
- protected readonly IDurableEntityManager _durableManager;
- protected readonly ILogger _logger;
-
- protected GpsCardControllerBase(
- IGpsCardDataAccessor dataAccessor,
- IGpsCardOperatorManager operatorManager,
- IDurableEntityManager durableManager,
- ILogger logger)
- {
- _dataAccessor=dataAccessor;
- _operatorManager = operatorManager;
- _durableManager = durableManager;
- _logger = logger;
- }
-
- /// <summary>
- /// 通过主键值,获取实体
- /// </summary>
- /// <param name="id"></param>
- /// <param name="requestId">关联服务标识</param>
- /// <returns></returns>
- [HttpGet]
- [QueryCacheInterceptor]
- public async virtual Task<T> GetById([Required] string id, [FromHeader] string requestId)
- {
- AssertModelStateIsValid();
-
- //var key = EntityUtils.GetWrapKeyValue<T>(id);
- return await _dataAccessor.GetByIDAsync<T>(id);
- }
-
- /// <summary>
- /// 通过查询条件,获取符合条件的第一个实体
- /// </summary>
- /// <param name="conditions"></param>
- /// <param name="requestId">关联服务标识</param>
- /// <returns></returns>
- [HttpPost]
- [QueryCacheInterceptor]
- public async virtual Task<T?> GetFirst([FromBody] GeneralParam conditions, [FromHeader] string requestId)
- {
- AssertModelStateIsValid();
-
- var parser = new QueryExpressionParser<T>();
- var expression = parser.ParserConditions(conditions.Filters!);
- var list = await _dataAccessor.GetMany(expression).OrderConditions(conditions.OrderBys!).Take(1).ToListAsync();
-
- return list.Count > 0 ? list[0] : null;
- }
-
- /// <summary>
- /// 获取实体列表(只提取符合条件的前100条记录)
- /// </summary>
- /// <param name="conditions"></param>
- /// <param name="requestId">关联服务标识</param>
- /// <returns></returns>
- [HttpPost]
- [QueryCacheInterceptor]
- public async virtual Task<IEnumerable<T>> GetList([FromBody] GeneralParam conditions, [FromHeader] string requestId)
- {
- AssertModelStateIsValid();
-
- var parser = new QueryExpressionParser<T>();
- var expression = parser.ParserConditions(conditions.Filters!);
- var list = await _dataAccessor.GetMany(expression).OrderConditions(conditions.OrderBys!).Take(100).ToListAsync();
- return list;
- }
-
- /// <summary>
- /// Insert实体
- /// </summary>
- /// <param name="model"></param>
- /// <param name="requestId">关联服务标识</param>
- [HttpPost]
- [InsertCacheInterceptor]
- public virtual void Add([FromBody] T model, [FromHeader] string requestId)
- {
- AssertModelStateIsValid(model);
-
- var item = new OperateCacheItem
- {
- Type = DelayOperateTypeEnum.Insert,
- CreateTime = DateTime.Now,
- EntityType = typeof(T),
- JsonData = JsonConvert.SerializeObject(model)
- };
- _operatorManager.Append(model.GetUniqueKey(), item);
- }
-
- /// <summary>
- /// Update实体
- /// </summary>
- /// <param name="model"></param>
- /// <param name="requestId">关联服务标识</param>
- [HttpPut]
- [UpdateCacheInterceptor]
- public virtual void Update([FromBody] T model, [FromHeader] string requestId)
- {
- AssertModelStateIsValid(model);
-
- var item = new OperateCacheItem
- {
- Type = DelayOperateTypeEnum.Update,
- CreateTime = DateTime.Now,
- EntityType = typeof(T),
- JsonData = JsonConvert.SerializeObject(model)
- };
- _operatorManager.Append(model.GetRequiredUniqueKey(), item);
- }
-
- /// <summary>
- /// Delete实体
- /// </summary>
- /// <param name="model"></param>
- /// <param name="requestId">关联服务标识</param>
- [HttpDelete]
- [DeleteCacheInterceptor]
- public virtual void Delete([FromBody] T model, [FromHeader] string requestId)
- {
- //删除操作不需要验证模型的有效性
- //AssertModelStateIsValid();
-
- var item = new OperateCacheItem
- {
- Type = DelayOperateTypeEnum.Delete,
- CreateTime = DateTime.Now,
- EntityType = typeof(T),
- JsonData = JsonConvert.SerializeObject(model),
- };
- _operatorManager.Append(model.GetRequiredUniqueKey(), item);
- }
- }
- }
|