From 4ff56211fc609419efb1f8c15b1d684d72294ddc Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 05 八月 2025 18:04:29 +0800 Subject: [PATCH] feat:角色开发 --- FlexJobApi.Core/Utils/DbUtils/DbUtils.cs | 72 ++++++++++++++++++++++++++++++++++++ 1 files changed, 72 insertions(+), 0 deletions(-) diff --git a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs index 5531843..a1465c0 100644 --- a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs +++ b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs @@ -1,22 +1,87 @@ 锘縰sing Furion; using Furion.DatabaseAccessor; using Furion.DistributedIDGenerator; +using Furion.FriendlyException; +using Mapster; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace FlexJobApi.Core { + /// <summary> + /// 鏁版嵁搴撳伐鍏� + /// </summary> public static class DbUtils { + /// <summary> + /// 鍒犻櫎鏁版嵁 + /// </summary> + /// <typeparam name="TEntity"></typeparam> + /// <param name="request"></param> + /// <param name="query"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public static async Task<int> DeleteData<TEntity>(this DeleteDataCommand request, Func<IQueryable<TEntity>, IQueryable<TEntity>> query = null, CancellationToken cancellationToken = default) + where TEntity : CommonEntity, new() + { + var rep = Db.GetRepository<TEntity>(); + var q = rep.AsQueryable(); + if (query != null) q = query(q); + var entities = await q + .Where(it => request.Ids.Contains(it.Id)) + .ToListAsync(cancellationToken); + return entities.Any() + ? await rep.DeleteNowAsync(entities, cancellationToken) + : 0; + } + + /// <summary> + /// 淇濆瓨鏁版嵁 + /// </summary> + /// <typeparam name="TEntity"></typeparam> + /// <typeparam name="TRequest"></typeparam> + /// <param name="rep"></param> + /// <param name="request"></param> + /// <param name="checkExist"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public static async Task<Guid> SaveData<TEntity, TRequest>(this TRequest request, Func<TEntity, TRequest, bool> checkExist = null, CancellationToken cancellationToken = default) + where TEntity : CommonEntity, new() + where TRequest : SaveDataCommand, new() + { + var xmlDoc = await XmlDocUtils.GetXmlDocAsync(); + var summary = await typeof(TEntity).GetSummary(xmlDoc); + var rep = Db.GetRepository<TEntity>(); + if (request.Id.HasValue) + { + var entity = await rep.AsQueryable().FirstOrDefaultAsync(it => it.Id == request.Id, cancellationToken); + if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, $"璇summary ?? "淇℃伅"}"); + if (checkExist != null && checkExist(entity, request)) throw Oops.Oh(EnumErrorCodeType.s405, $"璇summary ?? "淇℃伅"}"); + request.Adapt(entity); + await rep.UpdateAsync(entity); + return entity.Id; + } + else + { + var entity = new TEntity(); + if (checkExist != null && checkExist(entity, request)) throw Oops.Oh(EnumErrorCodeType.s405, $"璇summary ?? "淇℃伅"}"); + request.Adapt(entity); + await rep.InsertAsync(entity); + return entity.Id; + } + } + /// <summary> /// 鐢熸垚瀹炰綋 /// </summary> @@ -67,8 +132,15 @@ modelBuilder.Entity(entityType.ClrType).HasQueryFilter(lambda); } } + + Console.WriteLine("鏁版嵁搴撻摼鎺ュ湴鍧�锛�" + App.Configuration.GetConnectionString("FlexJobApi")); } + /// <summary> + /// 鏁版嵁鍙樻洿浜嬩欢 + /// </summary> + /// <param name="eventData"></param> + /// <param name="result"></param> public static void SavingChangesEvent(DbContextEventData eventData, InterceptionResult<int> result) { // 鑾峰彇褰撳墠浜嬩欢瀵瑰簲涓婁笅鏂� -- Gitblit v1.9.1