TemplatePro/BZPT.Domains/Services/SugarServiceBase.cs

182 lines
6.6 KiB
C#
Raw Normal View History

2025-08-29 23:15:34 +08:00
using BZPT.Repositories;
2025-07-17 00:19:53 +08:00
using DevExtreme.AspNet.Data;
using ServiceStack;
2025-03-02 23:30:03 +08:00
using System.Net;
namespace BZPT.Domains.Services
{
2025-08-29 23:15:34 +08:00
public class SugarServiceBase<TEntity, TDto> : BaseService where TDto : BaseDto where TEntity : EntityBase<string>
2025-03-02 23:30:03 +08:00
{
#region CUD
[Autowired]
public ILogger<TDto> Loger { get; set; }
[Autowired]
2025-07-17 00:19:53 +08:00
public IRepositorySugarBase<TEntity, string> Repository { get; set; }
2025-03-02 23:30:03 +08:00
public virtual async Task<INPResult> Add(TDto add)
{
var vRst = add.Validates();
if (vRst.StatusCode != HttpStatusCode.OK.ToInt())
{
return vRst;
}
var entity = this.MapperService.Map<TEntity>(add);
2025-07-17 00:19:53 +08:00
entity.Id = StringObjectIdGenerator.Instance.GenerateId().ToString();
2025-03-02 23:30:03 +08:00
var rst = await Repository.AddsAsync(entity);
return Success(entity.Id);
}
public virtual async Task<INPResult> 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<int>(rstCount);
}
public virtual async Task<INPResult> Delete(string id)
{
2025-08-29 23:15:34 +08:00
if (string.IsNullOrWhiteSpace(id))
2025-03-02 23:30:03 +08:00
{
return new FailResult<TEntity>($"id 参数不能为空");
}
2025-08-29 23:15:34 +08:00
var rstCount = await this.Repository.RemoveAsync(t => t.Id == id);
2025-03-02 23:30:03 +08:00
return new SuccessResult<int>(rstCount);
}
2025-08-29 23:15:34 +08:00
public virtual async Task<INPResult> Delete(Expression<Func<TEntity, bool>> deleteWhere)
2025-03-02 23:30:03 +08:00
{
var rstCount = await this.Repository.RemoveAsync(deleteWhere);
return new SuccessResult<int>(rstCount);
}
public virtual async Task<INPResult> Edit(TDto edit)
{
var vRst = edit.Validates();
if (vRst.StatusCode != HttpStatusCode.OK.ToInt())
{
return vRst;
}
var entity = this.MapperService.Map<TEntity>(edit);
var rstCount = await this.Repository.AddOrUpdate(entity);
return new SuccessResult<int>(rstCount);
}
#endregion
#region Query
public override string GetDomainShortName()
{
return "请重写GetDomainShortName";
}
public virtual async Task<IListResult<TDto>> GetListAsync(QueryExp exp)
{
var vResult = exp.Validates();
if (vResult.StatusCode == 200)
{
var srcItems = await Repository.GetListByExpAsync(exp.GetExp<TEntity>(), exp.GetSelectSorts<TEntity>());
var dtos = this.MapperService.Map<IEnumerable<TEntity>, ListResult<TDto>>(srcItems);
return dtos;
}
return (IListResult<TDto>)vResult;
}
public virtual async Task<IListResult<TDto>> GetListAsync(Expression<Func<TEntity, bool>> filter)
{
var entitys = await Repository.GetListByExpAsync(filter);
var dtos = MapperService.Map<IEnumerable<TEntity>, IListResult<TDto>>(entitys);
return dtos;
}
public virtual async Task<IListResult<TDto>> GetPageAsync(QueryPageExp exp)
{
var vResult = exp.Validates();
if (vResult.StatusCode == 200)
{
var entitys = await Repository.GetPagedAsync(exp.PageNum, exp.PageSize, exp.GetExp<TEntity>(), exp.GetSelectSorts<TEntity>());
var dtos = MapperService.Map<IListResult<TEntity>, IListResult<TDto>>((IListResult<TEntity>)entitys);
return dtos;
}
return (IListResult<TDto>)vResult;
}
2025-07-17 00:19:53 +08:00
public virtual async Task<IListResult<TDto>> GetPageAsync(DataSourceLoadOptions loadOptionsexp)
{
if (loadOptionsexp.Sort == null || loadOptionsexp.Sort.Length == 0)
{
loadOptionsexp.Sort = new SortingInfo[] { new SortingInfo() { Selector = "CreateTime", Desc = true } };
}
2025-08-29 23:15:34 +08:00
if (loadOptionsexp.Filter == null)
{
loadOptionsexp.Filter = new List<object>();
}
2025-07-17 00:19:53 +08:00
Type type = typeof(TEntity);
// 检查是否存在指定名称的接口
Type interfaceType = type.GetInterface("ILogicDelete");
if (interfaceType != null && !loadOptionsexp.Filter.Contains("IsDeleted"))
{
loadOptionsexp.And(new List<object>(){
"IsDeleted","=",false });
}
var entitys = await Repository.GetPagedAsync(loadOptionsexp);
var dtos = MapperService.Map<IListResult<TEntity>, IListResult<TDto>>((IListResult<TEntity>)entitys);
return dtos;
}
public virtual async Task<IListResult<VO>> GetPageAsync<VO>(DataSourceLoadOptions loadOptionsexp)
{
if (loadOptionsexp.Sort == null || loadOptionsexp.Sort.Length == 0)
{
loadOptionsexp.Sort = new SortingInfo[] { new SortingInfo() { Selector = "CreateTime", Desc = true } };
}
2025-08-29 23:15:34 +08:00
if (loadOptionsexp.Filter == null)
{
loadOptionsexp.Filter = new List<object>();
}
2025-07-17 00:19:53 +08:00
Type type = typeof(TEntity);
// 检查是否存在指定名称的接口
Type interfaceType = type.GetInterface("ILogicDelete");
2025-08-29 23:15:34 +08:00
if (interfaceType != null && !loadOptionsexp.Filter.Contains("IsDeleted"))
2025-07-17 00:19:53 +08:00
{
loadOptionsexp.And(new List<object>(){
"IsDeleted","=",false });
}
var entitys = await Repository.GetPagedAsync(loadOptionsexp);
var dtos = MapperService.Map<IListResult<TEntity>, IListResult<VO>>((IListResult<TEntity>)entitys);
return dtos;
}
2025-03-02 23:30:03 +08:00
/// <summary>
/// GetAsync
/// </summary>
/// <param name="entityId">ID</param>
/// <returns></returns>
public virtual async Task<INPResult> GetAsync(string entityId)
{
if (string.IsNullOrEmpty(entityId))
{
return base.FailParams<TDto>(nameof(entityId));
}
var entity = await Repository.FindByAsync(entityId);
var entityVo = MapperService.Map<TDto>(entity);
return Success(entityVo);
}
#endregion
}
}