From 59833ddbf47ed028462e1b089b46bf7c6f7518e3 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期二, 05 八月 2025 18:31:38 +0800
Subject: [PATCH] feat:字典开发

---
 FlexJobApi.Core/Utils/DbUtils/DbUtils.cs |   71 +++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
index 5531843..ecaf344 100644
--- a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
+++ b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
@@ -1,22 +1,86 @@
 锘縰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="request"></param>
+        /// <param name="checkExist"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public static async Task<Guid> SaveData<TEntity, TRequest>(this TRequest request, Func<IQueryable<TEntity>, 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(rep.AsQueryable().AsNoTracking(), 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(rep.AsQueryable().AsNoTracking(), entity, request)) throw Oops.Oh(EnumErrorCodeType.s405, $"璇summary ?? "淇℃伅"}");
+                request.Adapt(entity);
+                await rep.InsertAsync(entity);
+                return entity.Id;
+            }
+        }
+
         /// <summary>
         /// 鐢熸垚瀹炰綋
         /// </summary>
@@ -67,8 +131,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