using Furion.DynamicApiController; using Newtonsoft.Json.Linq; namespace Cis.Core.Common; [NonController] public class ServiceBase : IDynamicApiController where T : EntityBase, new() { protected readonly SqlSugarRepository _baseRep; public ServiceBase(SqlSugarRepository baseRep) { _baseRep = baseRep; } /// /// 添加实体类 /// /// 实体类 /// [HttpPost] public virtual async Task Add([FromForm] T entity) { return await _baseRep.InsertAsync(entity); } /// /// 添加实体类并返回 id /// /// 实体类 /// [HttpPost] public virtual async Task AddReturnId([FromForm] T entity) { bool ret = await _baseRep.InsertAsync(entity); if (!ret) return 0; return entity.Id; } /// /// 批量添加实体类 /// /// 实体类列表 /// [HttpPost] public virtual async Task AddList([Required][FromForm] List list) { return await _baseRep.InsertRangeAsync(list); } /// /// 更新实体类 /// /// 实体类 /// [HttpPost] public virtual async Task Update([FromForm] T entity) { return await _baseRep.UpdateAsync(entity); } /// /// 批量更新实体类 /// /// 实体类列表 /// [HttpPost] public virtual async Task UpdateList([Required][FromForm] List list) { return await _baseRep.UpdateRangeAsync(list); } /// /// 删除实体类 /// /// 实体类 id /// [HttpPost] public virtual async Task Delete([Required][FromForm] long id) { return await _baseRep.DeleteByIdAsync(id); } /// /// 批量删除实体类 /// /// 实体类数组 /// [HttpPost] public virtual async Task DeleteArray([Required][FromForm] string ids) { object[] objects = ids.ToSplitObjects(); return await _baseRep.DeleteByIdsAsync(objects); } /// /// 假删除实体类 /// /// 实体类 id /// 是否假删除 /// [HttpPost] public virtual async Task FakeDelete([Required][FromForm] long id, [FromForm] bool isDelete = true) { return await _baseRep.AsUpdateable(new T { Id = id, IsDelete = isDelete }) .UpdateColumns(it => it.IsDelete) .ExecuteCommandAsync() > 0; } /// /// 获取实体类 /// /// 实体类 id /// [HttpGet] public virtual async Task Get([Required] long id) { T entity = await _baseRep.GetByIdAsync(id); return entity; } /// /// 获取实体类 /// /// equal:id,isDelete; between:[startTime,endTime]; /// [HttpGet] public virtual async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); var exp = Expressionable.Create(); if (queryObj.TryGetValue("Id", StringComparison.OrdinalIgnoreCase, out JToken Id)) exp.And(it => it.Id.Equals(Id)); if (queryObj.TryGetValue("IsDelete", StringComparison.OrdinalIgnoreCase, out JToken isDelete)) exp.And(it => it.IsDelete.Equals(isDelete)); if (queryObj.TryGetValue("StartTime", StringComparison.OrdinalIgnoreCase, out JToken startTime) && queryObj.TryGetValue("EndTime", StringComparison.OrdinalIgnoreCase, out JToken endTime)) exp.And(it => it.CreateTime >= startTime.ToDateTime() && it.CreateTime <= endTime.ToDateTime()); var entity = await _baseRep.AsQueryable() .Where(exp.ToExpression()) .FirstAsync(); return entity; } /// /// 批量获取实体类 /// /// equal:isDelete; between:[startTime,endTime]; /// [HttpGet] public virtual async Task> GetList(string queryJson = "") { JObject queryObj = queryJson.ToJObject(); var exp = Expressionable.Create(); if (queryObj.TryGetValue("IsDelete", StringComparison.OrdinalIgnoreCase, out JToken isDelete)) exp.And(it => it.IsDelete.Equals(isDelete)); if (queryObj.TryGetValue("StartTime", StringComparison.OrdinalIgnoreCase, out JToken startTime) && queryObj.TryGetValue("EndTime", StringComparison.OrdinalIgnoreCase, out JToken endTime)) exp.And(it => it.CreateTime >= startTime.ToDateTime() && it.CreateTime <= endTime.ToDateTime()); var list = await _baseRep.AsQueryable() .Where(exp.ToExpression()) .ToListAsync(); return list; } /// /// 批量获取分页实体类 /// /// equal:isDelete; between:[startTime,endTime]; /// index,size /// [HttpGet] public virtual async Task> GetPageList([Required] string pagination, string queryJson = "") { JObject queryObj = queryJson.ToJObject(); Pagination pageObj = pagination.ToObject(); var exp = Expressionable.Create(); if (queryObj.TryGetValue("IsDelete", StringComparison.OrdinalIgnoreCase, out JToken isDelete)) exp.And(it => it.IsDelete.Equals(isDelete)); if (queryObj.TryGetValue("StartTime", StringComparison.OrdinalIgnoreCase, out JToken startTime) && queryObj.TryGetValue("EndTime", StringComparison.OrdinalIgnoreCase, out JToken endTime)) exp.And(it => it.CreateTime >= startTime.ToDateTime() && it.CreateTime <= endTime.ToDateTime()); var list = await _baseRep.AsQueryable() .Where(exp.ToExpression()) .ToPageListAsync(pageObj.Index, pageObj.Size); return list; } }