mirror of
https://github.com/dotnetcore/Util.git
synced 2026-10-23 15:59:05 +08:00
111 lines
4.4 KiB
C#
111 lines
4.4 KiB
C#
using System.Threading.Tasks;
|
|
using Util.Applications;
|
|
using Util.Datas.Sql;
|
|
using Util.Domains.Repositories;
|
|
using Util.Exceptions;
|
|
using Util.Maps;
|
|
using Util.Samples.Data;
|
|
using Util.Samples.Domain.Models;
|
|
using Util.Samples.Domain.Repositories;
|
|
using Util.Samples.Service.Abstractions.Systems;
|
|
using Util.Samples.Service.Dtos.Systems;
|
|
using Util.Samples.Service.Queries.Systems;
|
|
|
|
namespace Util.Samples.Service.Implements.Systems {
|
|
/// <summary>
|
|
/// 应用程序服务
|
|
/// </summary>
|
|
public class ApplicationService : CrudServiceBase<Application, ApplicationDto, ApplicationQuery>, IApplicationService {
|
|
/// <summary>
|
|
/// 初始化应用程序服务
|
|
/// </summary>
|
|
/// <param name="unitOfWork">工作单元</param>
|
|
/// <param name="applicationRepository">应用程序仓储</param>
|
|
/// <param name="sqlQuery">Sql查询对象</param>
|
|
public ApplicationService( ISampleUnitOfWork unitOfWork, IApplicationRepository applicationRepository, ISqlQuery sqlQuery )
|
|
: base( unitOfWork, applicationRepository ) {
|
|
ApplicationRepository = applicationRepository;
|
|
SqlQuery = sqlQuery;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 应用程序仓储
|
|
/// </summary>
|
|
public IApplicationRepository ApplicationRepository { get; set; }
|
|
/// <summary>
|
|
/// Sql查询对象
|
|
/// </summary>
|
|
public ISqlQuery SqlQuery { get; }
|
|
|
|
/// <summary>
|
|
/// 转换为数据传输对象
|
|
/// </summary>
|
|
/// <param name="entity">实体</param>
|
|
protected override ApplicationDto ToDto( Application entity ) {
|
|
if( entity == null )
|
|
return new ApplicationDto();
|
|
return entity.MapTo<ApplicationDto>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 转换为实体
|
|
/// </summary>
|
|
/// <param name="dto">数据传输对象</param>
|
|
protected override Application ToEntity( ApplicationDto dto ) {
|
|
if( dto == null )
|
|
return new Application();
|
|
return dto.MapTo( new Application( dto.Id.ToGuid() ) );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 分页查询
|
|
/// </summary>
|
|
/// <param name="query">查询参数</param>
|
|
public override async Task<PagerList<ApplicationDto>> PagerQueryAsync( ApplicationQuery query ) {
|
|
return await SqlQuery
|
|
.Select<Application>( true )
|
|
.From<Application>( "a" )
|
|
.WhereIfNotEmpty<Application>( t => t.Code.Contains( query.Code ) )
|
|
.WhereIfNotEmpty<Application>( t => t.Name.Contains( query.Name ) )
|
|
.WhereIfNotEmpty<Application>( t => t.Comment.Contains( query.Comment ) )
|
|
.OrIfNotEmpty<Application>( t => t.Code.Contains( query.Keyword ), t => t.Name.Contains( query.Keyword ) )
|
|
.ToPagerListAsync<ApplicationDto>( query );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建前操作
|
|
/// </summary>
|
|
protected override async Task CreateBeforeAsync( Application entity ) {
|
|
await base.CreateBeforeAsync( entity );
|
|
if( await ApplicationRepository.ExistsAsync( t => t.Code == entity.Code ) )
|
|
ThrowCodeRepeatException( entity.Code );
|
|
if( await ApplicationRepository.ExistsAsync( t => t.Name == entity.Name ) )
|
|
ThrowNameRepeatException( entity.Name );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 抛出编码重复异常
|
|
/// </summary>
|
|
private void ThrowCodeRepeatException( string code ) {
|
|
throw new Warning( $"应用程序编码 {code} 已存在" );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 抛出名称重复异常
|
|
/// </summary>
|
|
private void ThrowNameRepeatException( string name ) {
|
|
throw new Warning( $"应用程序名称 {name} 已存在" );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 修改前操作
|
|
/// </summary>
|
|
protected override async Task UpdateBeforeAsync( Application entity ) {
|
|
await base.UpdateBeforeAsync( entity );
|
|
if( await ApplicationRepository.ExistsAsync( t => t.Id != entity.Id && t.Code == entity.Code ) )
|
|
ThrowCodeRepeatException( entity.Code );
|
|
if( await ApplicationRepository.ExistsAsync( t => t.Id != entity.Id && t.Name == entity.Name ) )
|
|
ThrowNameRepeatException( entity.Name );
|
|
}
|
|
}
|
|
} |