using BZPT.Domains.IRepositories.Sys; using BZPT.Dto.Sys; using BZPT.Repositories; using Consul.Filtering; using DevExtreme.AspNet.Data; using NetTaste; using NPlatform.Domains.Entity; using NPOI.SS.Formula.Functions; using ServiceStack; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace BZPT.Domains.Services { public class SugarServiceBase :BaseService where TDto : BaseDto where TEntity:EntityBase { #region CUD [Autowired] public ILogger Loger { get; set; } [Autowired] public IRepositorySugarBase Repository { get; set; } public virtual async Task Add(TDto add) { var vRst = add.Validates(); if (vRst.StatusCode != HttpStatusCode.OK.ToInt()) { return vRst; } var entity = this.MapperService.Map(add); entity.Id = StringObjectIdGenerator.Instance.GenerateId().ToString(); var rst = await Repository.AddsAsync(entity); return Success(entity.Id); } public virtual async Task Delete(TDto dto) { var vRst = dto.Validates(); if (vRst.StatusCode != HttpStatusCode.OK.ToInt()) { return vRst; } var rstCount = 0; if (!string.IsNullOrWhiteSpace(dto.Id)) { rstCount = await this.Repository.RemoveAsync(dto.Id); } return new SuccessResult(rstCount); } public virtual async Task Delete(string id) { if(string.IsNullOrWhiteSpace(id)) { return new FailResult($"id 参数不能为空"); } var rstCount = await this.Repository.RemoveAsync(t=>t.Id== id); return new SuccessResult(rstCount); } public virtual async Task Delete(Expression< Func> deleteWhere) { var rstCount = await this.Repository.RemoveAsync(deleteWhere); return new SuccessResult(rstCount); } public virtual async Task Edit(TDto edit) { var vRst = edit.Validates(); if (vRst.StatusCode != HttpStatusCode.OK.ToInt()) { return vRst; } var entity = this.MapperService.Map(edit); var rstCount = await this.Repository.AddOrUpdate(entity); return new SuccessResult(rstCount); } #endregion #region Query public override string GetDomainShortName() { return "请重写GetDomainShortName"; } public virtual async Task> GetListAsync(QueryExp exp) { var vResult = exp.Validates(); if (vResult.StatusCode == 200) { var srcItems = await Repository.GetListByExpAsync(exp.GetExp(), exp.GetSelectSorts()); var dtos = this.MapperService.Map, ListResult>(srcItems); return dtos; } return (IListResult)vResult; } public virtual async Task> GetListAsync(Expression> filter) { var entitys = await Repository.GetListByExpAsync(filter); var dtos = MapperService.Map, IListResult>(entitys); return dtos; } public virtual async Task> GetPageAsync(QueryPageExp exp) { var vResult = exp.Validates(); if (vResult.StatusCode == 200) { var entitys = await Repository.GetPagedAsync(exp.PageNum, exp.PageSize, exp.GetExp(), exp.GetSelectSorts()); var dtos = MapperService.Map, IListResult>((IListResult)entitys); return dtos; } return (IListResult)vResult; } public virtual async Task> GetPageAsync(DataSourceLoadOptions loadOptionsexp) { if (loadOptionsexp.Sort == null || loadOptionsexp.Sort.Length == 0) { loadOptionsexp.Sort = new SortingInfo[] { new SortingInfo() { Selector = "CreateTime", Desc = true } }; } Type type = typeof(TEntity); // 检查是否存在指定名称的接口 Type interfaceType = type.GetInterface("ILogicDelete"); if (interfaceType != null && !loadOptionsexp.Filter.Contains("IsDeleted")) { loadOptionsexp.And(new List(){ "IsDeleted","=",false }); } var entitys = await Repository.GetPagedAsync(loadOptionsexp); var dtos = MapperService.Map, IListResult>((IListResult)entitys); return dtos; } public virtual async Task> GetPageAsync(DataSourceLoadOptions loadOptionsexp) { if (loadOptionsexp.Sort == null || loadOptionsexp.Sort.Length == 0) { loadOptionsexp.Sort = new SortingInfo[] { new SortingInfo() { Selector = "CreateTime", Desc = true } }; } Type type = typeof(TEntity); // 检查是否存在指定名称的接口 Type interfaceType = type.GetInterface("ILogicDelete"); if (interfaceType != null&&!loadOptionsexp.Filter.Contains("IsDeleted")) { loadOptionsexp.And(new List(){ "IsDeleted","=",false }); } var entitys = await Repository.GetPagedAsync(loadOptionsexp); var dtos = MapperService.Map, IListResult>((IListResult)entitys); return dtos; } /// /// GetAsync /// /// ID /// public virtual async Task GetAsync(string entityId) { if (string.IsNullOrEmpty(entityId)) { return base.FailParams(nameof(entityId)); } var entity = await Repository.FindByAsync(entityId); var entityVo = MapperService.Map(entity); return Success(entityVo); } #endregion } }