using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using HealthMonitor.Core.Aop; using HealthMonitor.Core.Cache; using HealthMonitor.Core.Dal; using HealthMonitor.Core.Dal.Factory; using HealthMonitor.Core.Operator; using HealthMonitor.Core.Query; using HealthMonitor.Core.Query.Extensions; using HealthMonitor.Util.Common; using HealthMonitor.Util.Common.Operator; using HealthMonitor.Util.Entities.Base; using HealthMonitor.Util.Models; using HealthMonitor.Util.QueryObjects; using HealthMonitor.WebApi.Filters; namespace HealthMonitor.WebApi.Controllers.Base { [Produces("application/json")] [Route("api/HealthMonitor/[controller]/[action]")] [ApiController] public abstract class HealthMonitorControllerBase : DefaultControllerBase where T : HealthMonitorEntityBase { //protected readonly GpsCardAccessorFactory _accessorFactory; //protected readonly IGpsCardDataAccessor _dataAccessor; //protected readonly IGpsCardOperatorManager _operatorGpsCardManager; protected readonly IHealthMonitorDataAccessor _dataAccessor; protected readonly IHealthMonitorOperatorManager _operatorManager; protected readonly IDurableEntityManager _durableManager; protected readonly ILogger _logger; protected HealthMonitorControllerBase( IHealthMonitorDataAccessor dataAccessor, //IGpsCardDataAccessor gpsCardDataAccessor, IHealthMonitorOperatorManager operatorGpsCardManager, IDurableEntityManager durableManager, ILogger logger) { _dataAccessor = dataAccessor; _operatorManager = operatorGpsCardManager; _durableManager = durableManager; _logger = logger; } /// /// 通过主键值,获取实体 /// /// /// 关联服务标识 /// [HttpGet] //[QueryCacheInterceptor] public async virtual Task GetById([Required] string id, [FromHeader] string requestId) { AssertModelStateIsValid(); //var key = EntityUtils.GetWrapKeyValue(id); return await _dataAccessor.GetByIDAsync(id); } /// /// 通过查询条件,获取符合条件的第一个实体 /// /// /// 关联服务标识 /// [HttpPost] //[QueryCacheInterceptor] public async virtual Task GetFirst([FromBody] GeneralParam conditions, [FromHeader] string requestId) { AssertModelStateIsValid(); var parser = new QueryExpressionParser(); 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; } /// /// 获取实体列表(只提取符合条件的前100条记录) /// /// /// 关联服务标识 /// [HttpPost] //[QueryCacheInterceptor] public async virtual Task> GetPageList([FromBody] Paging page, [FromHeader] string requestId) { AssertModelStateIsValid(); var all = _dataAccessor.GetAll(); var list = await all.Skip((page.CurPage - 1) * page.PageSize).Take(page.PageSize).ToListAsync(); int totals = await all.CountAsync(); return new PageData { Totals= totals, Rows =list}; } [HttpPost] public async virtual Task> GetList([FromBody] GeneralParam conditions, [FromHeader] string requestId) { AssertModelStateIsValid(); var parser = new QueryExpressionParser(); var expression = parser.ParserConditions(conditions.Filters!); var list = await _dataAccessor.GetMany(expression).OrderConditions(conditions.OrderBys!).Take(100).ToListAsync(); return list; } [HttpPost] public async virtual Task> GetPages([FromBody] GeneralParam conditions, [FromHeader] string requestId) { AssertModelStateIsValid(); //var parser = new QueryExpressionParser(); //var expression = parser.ParserConditions(conditions.Filters!); // var aa = await _dataAccessor.GetPageListAsync(1,1, expression, conditions.OrderBys!); //var parser = new QueryExpressionParser(); //var expression = parser.ParserConditions(conditions.Filters!); var pageSize = 1; var pageIdx = 1; //var bb = await _dataAccessor.OrderBy(conditions.OrderBys!).Skip(pageSize * (pageIdx - 1)).Take(pageSize); var list = await _dataAccessor.GetAll().OrderConditions(conditions.OrderBys!).Skip(pageSize * (pageIdx - 1)).Take(pageSize).ToListAsync(); return list; } /// /// Insert实体 /// /// /// 关联服务标识 [HttpPost] //[InsertCacheInterceptor] public virtual void Add([FromBody] T model, [FromHeader] string requestId) { AssertModelStateIsValid(model); _dataAccessor.Add(model); _dataAccessor.Save(); } /// /// Update实体 /// /// /// 关联服务标识 [HttpPut] //[UpdateCacheInterceptor] public virtual void Update([FromBody] T model, [FromHeader] string requestId) { AssertModelStateIsValid(model); //_dataAccessor.GetByIDAsync(model.GetPrimaryKey()); _dataAccessor.Update(model); _dataAccessor.Save(); //var item = new OperateCacheItem //{ // Type = DelayOperateTypeEnum.Update, // CreateTime = DateTime.Now, // EntityType = typeof(T), // JsonData = JsonConvert.SerializeObject(model) //}; //_operatorManager.Append(model.GetRequiredUniqueKey(), item); } /// /// Delete实体 /// /// /// 关联服务标识 [HttpDelete] //[DeleteCacheInterceptor] public virtual void Delete([FromBody] T model, [FromHeader] string requestId) { //删除操作不需要验证模型的有效性 //AssertModelStateIsValid(); _dataAccessor.Delete(model); _dataAccessor.Save(); //var item = new OperateCacheItem //{ // Type = DelayOperateTypeEnum.Delete, // CreateTime = DateTime.Now, // EntityType = typeof(T), // JsonData = JsonConvert.SerializeObject(model), //}; //_operatorManager.Append(model.GetRequiredUniqueKey(), item); } } }