From 7d64d742e52809237473e13e18faec2c23dfe3c7 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 07 八月 2025 17:13:53 +0800
Subject: [PATCH] feat:企业开发

---
 FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs |  118 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 76 insertions(+), 42 deletions(-)

diff --git a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
index 819710c..3228f39 100644
--- a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
+++ b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
@@ -1,4 +1,5 @@
-锘縰sing EFCore.BulkExtensions;
+锘縰sing Consul;
+using EFCore.BulkExtensions;
 using FlexJobApi.Core;
 using Furion.DatabaseAccessor;
 using Furion.DatabaseAccessor.Extensions;
@@ -49,6 +50,10 @@
             if (category == null) throw Oops.Oh(EnumErrorCodeType.s404, "鏁版嵁瀛楀吀绫诲埆");
             request.CategoryId = category.Id;
             if (!request.Code.StartsWith($"{category.Code}-")) throw Oops.Oh(EnumErrorCodeType.s400, "缂栧彿寮�澶撮渶瑕佸寘鍚被鍒紪鍙�-");
+            var parent = request.ParentId.HasValue
+                ? await rep.AsQueryable().AsNoTracking()
+                    .FirstOrDefaultAsync(it => it.Id == request.ParentId)
+                : null;
             return await request.SaveData<DictionaryData, SaveDictionaryDataCommand>(
                 null,
                 it =>
@@ -61,10 +66,15 @@
                     if (request.Id.HasValue)
                     {
                         if (entity.Code != request.Code) throw Oops.Oh(EnumErrorCodeType.s400, "缂栧彿涓嶅彲淇敼");
-                        DbUtils.UpdateTreeDataChildrenPath<DictionaryData>(
-                           $"{entity.Path}/{entity.Code}/",
-                           $"{entity.Path}/{request.Code}/",
-                           cancellationToken).Wait();
+                        if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s400, "涓婄骇Id涓嶅彲淇敼");
+                        //DbUtils.UpdateTreeDataChildrenPath<DictionaryData>(
+                        //   $"{entity.Path}/{entity.Code}/",
+                        //   $"{entity.Path}/{request.Code}/",
+                        //   cancellationToken).Wait();
+                    }
+                    else
+                    {
+                        entity.Deep = request.ParentId == null ? 1 : parent.Deep + 1;
                     }
                     request.Adapt(entity);
                 },
@@ -82,6 +92,12 @@
             return request.SetIsDisabled<DictionaryData>(cancellationToken: cancellationToken);
         }
 
+        /// <summary>
+        /// 鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
         public async Task<int> Handle(SyncHumanResourcesAreaDictionaryDataCommand request, CancellationToken cancellationToken)
         {
             var repHumanResourcesBaseArea = Db.GetRepository<BaseArea, HumanResourcesDbContextLocator>();
@@ -94,45 +110,63 @@
             {
                 CategoryId = categoryId
             });
-            foreach (var area in areas)
-            {
-                var entity = new DictionaryData();
-                entity.CategoryId = categoryId;
-                entity.Id = area.Id;
-                if (area.ParentId != 0)
-                {
-                    var parent = entities.FirstOrDefault(it => it.Field1 == area.ParentId.ToString());
-                    if (parent == null)
-                    {
-                        var parentArea = areas.FirstOrDefault(it => it.AreaCode == area.ParentId);
-                        if (parentArea != null)
-                        {
-                            throw Oops.Oh(EnumErrorCodeType.s404, "鏈壘鍒颁笂绾у湴鍖�");
-                        }
-                        else
-                        {
-                            continue;
-                        }
-                    }
-                    entity.ParentId = parent.Id;
-                    entity.Path = $"{parent.Path}{parent.Code}/";
-                }
-                else
-                {
-                    entity.Path = "/";
-                }
-                entity.Code = $"70-{area.AreaCode}";
-                entity.Content = area.AreaName;
-                entity.Field1 = area.AreaCode.ToString();
-                entity.Field2 = area.QuickQuery;
-                entity.Field3 = area.SimpleSpelling;
-                entity.Field4 = area.Layer.ToString();
-                entity.Field5 = area.Description;
-                entity.Sort = area.Sort ?? 0;
-                entities.Add(entity);
-            }
+            var parentAreas = areas.Where(it => it.ParentId == 0).ToList();
+            LoopSyncHumanResourcesAreaDictionaryData(categoryId, entities, areas, parentAreas);
             await rep.Context.BulkInsertAsync(entities);
             return entities.Count;
         }
+
+        /// <summary>
+        /// 閫掑綊鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁
+        /// </summary>
+        /// <param name="categoryId"></param>
+        /// <param name="entities"></param>
+        /// <param name="all"></param>
+        /// <param name="areas"></param>
+        /// <param name="deep"></param>
+        private void LoopSyncHumanResourcesAreaDictionaryData(Guid categoryId, List<DictionaryData> entities, List<BaseArea> all, List<BaseArea> areas, int deep = 1)
+        {
+            if (areas.IsNotNull())
+            {
+                foreach (var area in areas)
+                {
+                    var entity = new DictionaryData();
+                    entity.CategoryId = categoryId;
+                    entity.Id = area.Id;
+                    if (area.ParentId != 0)
+                    {
+                        var parent = entities.FirstOrDefault(it => it.Field1 == area.ParentId.ToString());
+                        if (parent == null)
+                        {
+                            var parentArea = areas.FirstOrDefault(it => it.AreaCode == area.ParentId);
+                            if (parentArea != null)
+                            {
+                                throw Oops.Oh(EnumErrorCodeType.s404, "涓婄骇鍦板尯");
+                            }
+                            continue;
+                        }
+                        entity.ParentId = parent.Id;
+                        entity.Path = $"{parent.Path}{parent.Code}/";
+                    }
+                    else
+                    {
+                        entity.Path = "/";
+                    }
+                    entity.Code = $"70-{area.AreaCode}";
+                    entity.Content = area.AreaName;
+                    entity.Field1 = area.AreaCode.ToString();
+                    entity.Field2 = area.QuickQuery;
+                    entity.Field3 = area.SimpleSpelling;
+                    entity.Field4 = area.Layer.ToString();
+                    entity.Field5 = area.Description;
+                    entity.Deep = deep;
+                    entity.Sort = area.Sort ?? 0;
+                    entities.Add(entity);
+
+                    var children = all.Where(it => it.ParentId == area.AreaCode).ToList();
+                    LoopSyncHumanResourcesAreaDictionaryData(categoryId, entities, all, children, deep + 1);
+                }
+            }
+        }
     }
 }

--
Gitblit v1.9.1