From 11bfefcd046d5e35754411f22cffa8d374fbdbc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Sat, 21 Jan 2023 16:10:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=80=BB=E8=BE=91=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/SqlsugarRepository.cs | 81 ++++++++++++++++++- .../Yi.Framework.Data/Entities/IState.cs | 13 +++ .../Repositories/IRepository.cs | 3 +- .../Services/CrudAppService.cs | 2 +- .../test/Yi.Framework.Web/TimeTest.txt | 1 + 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/IState.cs diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/Repositories/SqlsugarRepository.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/Repositories/SqlsugarRepository.cs index 9a583257..556ebab1 100644 --- a/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/Repositories/SqlsugarRepository.cs +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Core.Sqlsugar/Repositories/SqlsugarRepository.cs @@ -8,13 +8,15 @@ using System.Threading.Tasks; using Yi.Framework.Core.Attributes; using Yi.Framework.Core.Enums; using Yi.Framework.Core.Helper; +using Yi.Framework.Data.Entities; using Yi.Framework.Ddd.Dtos; +using Yi.Framework.Ddd.Entities; using Yi.Framework.Ddd.Repositories; namespace Yi.Framework.Core.Sqlsugar.Repositories { [AppService(ServiceType = typeof(IRepository<>))] - public class SqlsugarRepository : SimpleClient, IRepository where T : class, new() + public class SqlsugarRepository : SimpleClient, IRepository where T : class, IEntity, new() { public SqlsugarRepository(ISqlSugarClient context) : base(context) { @@ -35,7 +37,82 @@ namespace Yi.Framework.Core.Sqlsugar.Repositories public async Task> GetPageListAsync(Expression> whereExpression, IPagedAndSortedResultRequestDto page, string? orderBy, OrderByEnum orderByType = OrderByEnum.Asc) { - return await _DbQueryable.Where(whereExpression).OrderByIF(orderBy is not null, orderBy + " "+orderByType.ToString().ToLower()).ToPageListAsync(page.PageIndex, page.PageSize); + return await _DbQueryable.Where(whereExpression).OrderByIF(orderBy is not null, orderBy + " " + orderByType.ToString().ToLower()).ToPageListAsync(page.PageIndex, page.PageSize); + } + + + public override async Task DeleteAsync(T deleteObj) + { + //逻辑删除 + if (deleteObj is ISoftDelete) + { + //反射赋值 + ReflexHelper.SetModelValue(nameof(ISoftDelete.IsDeleted), true, deleteObj); + return await UpdateAsync(deleteObj); + + } + else + { + return await base.DeleteAsync(deleteObj); + + } + } + public override async Task DeleteAsync(List deleteObjs) + { + if (typeof(T) is ISoftDelete) + { + //反射赋值 + deleteObjs.ForEach(e => ReflexHelper.SetModelValue(nameof(ISoftDelete.IsDeleted), true, e)); + return await UpdateRangeAsync(deleteObjs); + } + else + { + return await base.DeleteAsync(deleteObjs); + } + } + public override async Task DeleteAsync(Expression> whereExpression) + { + if (typeof(T) is ISoftDelete) + { + var entities = await GetListAsync(whereExpression); + //反射赋值 + entities.ForEach(e => ReflexHelper.SetModelValue(nameof(ISoftDelete.IsDeleted), true, e)); + return await UpdateRangeAsync(entities); + } + else + { + return await base.DeleteAsync(whereExpression); + } + } + public override async Task DeleteByIdAsync(dynamic id) + { + if (typeof(T) is ISoftDelete) + { + var entity = await GetByIdAsync(id); + //反射赋值 + ReflexHelper.SetModelValue(nameof(ISoftDelete.IsDeleted), true, entity); + return await UpdateAsync(entity); + } + else + { + return await base.DeleteByIdAsync((object)id); + } + + } + public override async Task DeleteByIdsAsync(dynamic[] ids) + { + if (typeof(T) is ISoftDelete) + { + var entities = await _DbQueryable.In(ids).ToListAsync(); + //反射赋值 + entities.ForEach(e => ReflexHelper.SetModelValue(nameof(ISoftDelete.IsDeleted), true, e)); + return await UpdateRangeAsync(entities); + } + else + { + return await base.DeleteByIdsAsync(ids); + } + } } diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/IState.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/IState.cs new file mode 100644 index 00000000..fee2f365 --- /dev/null +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Data/Entities/IState.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Data.Entities +{ + public interface IState + { + public bool State { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Repositories/IRepository.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Repositories/IRepository.cs index 2a6d3cd8..2cb91d0f 100644 --- a/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Repositories/IRepository.cs +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Repositories/IRepository.cs @@ -6,10 +6,11 @@ using System.Text; using System.Threading.Tasks; using Yi.Framework.Core.Enums; using Yi.Framework.Ddd.Dtos; +using Yi.Framework.Ddd.Entities; namespace Yi.Framework.Ddd.Repositories { - public interface IRepository + public interface IRepository where T : class, IEntity, new() { //单查 Task GetByIdAsync(dynamic id); diff --git a/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Services/CrudAppService.cs b/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Services/CrudAppService.cs index c77ed4e0..bb89fe81 100644 --- a/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Services/CrudAppService.cs +++ b/Yi.Framework.Net6/src/framework/Yi.Framework.Ddd/Services/CrudAppService.cs @@ -69,7 +69,7 @@ namespace Yi.Framework.Ddd.Services { //使用反射,暂时先使用sqlsuga的雪花id提供 //ps: linshi - ReflexHelper.SetModelValue("Id", SnowflakeHelper.NextId, entity); + ReflexHelper.SetModelValue(nameof(IEntity.Id), SnowflakeHelper.NextId, entity); } } diff --git a/Yi.Framework.Net6/test/Yi.Framework.Web/TimeTest.txt b/Yi.Framework.Net6/test/Yi.Framework.Web/TimeTest.txt index 5fee3a46..26f6da0c 100644 --- a/Yi.Framework.Net6/test/Yi.Framework.Web/TimeTest.txt +++ b/Yi.Framework.Net6/test/Yi.Framework.Web/TimeTest.txt @@ -74,3 +74,4 @@ 2023:01:20-18:50:46本次运行启动时间为:6513毫秒 2023:01:20-18:53:16本次运行启动时间为:5186毫秒 2023:01:20-19:01:36本次运行启动时间为:5194毫秒 +2023:01:21-15:04:00本次运行启动时间为:7763毫秒