sunpengfei
2025-08-07 d644f492cea0856f1f3410d77d4545c6f615c651
FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
@@ -1,4 +1,5 @@
using EFCore.BulkExtensions;
using Consul;
using EFCore.BulkExtensions;
using FlexJobApi.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
@@ -82,6 +83,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 +101,61 @@
            {
                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>
        private void LoopSyncHumanResourcesAreaDictionaryData(Guid categoryId, List<DictionaryData> entities, List<BaseArea> all, List<BaseArea> areas)
        {
            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.Sort = area.Sort ?? 0;
                    entities.Add(entity);
                    var children = all.Where(it => it.ParentId == area.AreaCode).ToList();
                    LoopSyncHumanResourcesAreaDictionaryData(categoryId, entities, all, children);
                }
            }
        }
    }
}