Explorar o código

Merge branch 'master' of http://git.fwt.com/Hotline/hotline

TANG JIANG %!s(int64=2) %!d(string=hai) anos
pai
achega
f368b96351

+ 8 - 2
src/Hotline.Api/Controllers/OrgController.cs

@@ -14,11 +14,16 @@ namespace Hotline.Api.Controllers
     public class OrgController: BaseController
     {
         private readonly ISystemOrganizeRepository _systemOrganizeRepository;
+        private readonly ISystemDomainService _systemDomainService;
         private readonly IMapper _mapper;
 
-        public OrgController(ISystemOrganizeRepository systemOrganizeRepository,IMapper mapper)
+        public OrgController(
+            ISystemOrganizeRepository systemOrganizeRepository,
+            ISystemDomainService systemDomainService,
+            IMapper mapper)
         {
             _systemOrganizeRepository = systemOrganizeRepository;
+            _systemDomainService = systemDomainService;
             _mapper = mapper;
         }
 
@@ -45,7 +50,8 @@ namespace Hotline.Api.Controllers
         {
             var org = _mapper.Map<SystemOrganize>(dto);
             //处理编码
-            org.OrgCode =await _systemOrganizeRepository.GetNewOrgCode(org.ParentId);
+            org.OrgCode = await _systemDomainService.GenerateNewOrgCodeAsync(dto.ParentId, HttpContext.RequestAborted);
+            //org.OrgCode = await _systemOrganizeRepository.GetNewOrgCode(org.ParentId);
             org.InitOrgLevel();
             await _systemOrganizeRepository.AddAsync(org, HttpContext.RequestAborted);
         }

+ 21 - 21
src/Hotline.Repository.SqlSugar/System/SystemOrganizeRepository.cs

@@ -27,26 +27,26 @@ namespace Hotline.Repository.SqlSugar.System
             return list;
         }
 
-        public async Task<string> GetNewOrgCode(string parentId)
-        {
-            //查是否存在下级
-            var model = await Db.Queryable<SystemOrganize>()
-                .OrderByDescending(x => x.OrgCode)
-                .FirstAsync(x => x.ParentId == parentId);
-            //如果存在下级
-            if (model != null)
-            {
-                //return $"{int.Parse(model.OrgCode) +1:###}";
-                //return (int.Parse(model.OrgCode) + 1).ToString().PadLeft(3,'0');
-                return (int.Parse(model.OrgCode) + 1).ToString("000");
-            }
-            //如果不存在下级
-            else
-            {
-                var parentModel = await Db.Queryable<SystemOrganize>()
-                    .FirstAsync(x => x.Id == parentId);
-                return parentModel.OrgCode + "001";
-            }
-        }
+        //public async Task<string> GetNewOrgCode(string parentId)
+        //{
+        //    //查是否存在下级
+        //    var model = await Db.Queryable<SystemOrganize>()
+        //        .OrderByDescending(x => x.OrgCode)
+        //        .FirstAsync(x => x.ParentId == parentId);
+        //    //如果存在下级
+        //    if (model != null)
+        //    {
+        //        //return $"{int.Parse(model.OrgCode) +1:###}";
+        //        //return (int.Parse(model.OrgCode) + 1).ToString().PadLeft(3,'0');
+        //        return (int.Parse(model.OrgCode) + 1).ToString("000");
+        //    }
+        //    //如果不存在下级
+        //    else
+        //    {
+        //        var parentModel = await Db.Queryable<SystemOrganize>()
+        //            .FirstAsync(x => x.Id == parentId);
+        //        return parentModel.OrgCode + "001";
+        //    }
+        //}
     }
 }

+ 8 - 0
src/Hotline/Settings/ISystemDomainService.cs

@@ -17,5 +17,13 @@ namespace Hotline.Settings
         Task<IEnumerable<KeyValuePair<string, string>>> QueryOrgLevelStringOptionsAsync(CancellationToken cancellationToken);
 
         Task<IReadOnlyList<SysDicData>> GetSysDicDataByCodeAsync(string code, CancellationToken cancellationToken = default);
+
+        /// <summary>
+        /// 生成新的部门编码
+        /// </summary>
+        /// <param name="parentId"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task<string> GenerateNewOrgCodeAsync(string parentId, CancellationToken cancellationToken);
     }
 }

+ 1 - 1
src/Hotline/Settings/ISystemOrganizeRepository.cs

@@ -9,6 +9,6 @@ namespace Hotline.Settings
 
         Task<IReadOnlyList<SystemOrganize>> GetCanUseOrg();
 
-        Task<string> GetNewOrgCode(string? parentId);
+        //Task<string> GetNewOrgCode(string? parentId);
     }
 }

+ 23 - 0
src/Hotline/Settings/SystemDomainService.cs

@@ -1,4 +1,5 @@
 using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
 
 namespace Hotline.Settings;
 
@@ -39,4 +40,26 @@ public class SystemDomainService : ISystemDomainService, IScopeDependency
     {
         return await _sysDicDataRepository.Queryable().Where(x => x.DicTypeCode == code).ToTreeAsync(x => x.Children, x => x.ParentId, "");
     }
+
+    /// <summary>
+    /// 生成新的部门编码
+    /// </summary>
+    /// <param name="parentId"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<string> GenerateNewOrgCodeAsync(string parentId, CancellationToken cancellationToken)
+    {
+        var org = await _organizeRepository.GetAsync(parentId, cancellationToken);
+        if (org == null)
+            throw new UserFriendlyException("无效上级部门编码");
+        var count = await _organizeRepository.CountAsync(d => d.ParentId == parentId, cancellationToken);
+        var current = (count + 1).ToString("000");
+        var code = $"{org.OrgCode}{current}";
+        var exists = await _organizeRepository.AnyAsync(d => d.OrgCode == code, cancellationToken);
+        while (exists)
+        {
+            return await GenerateNewOrgCodeAsync(parentId, cancellationToken);
+        }
+        return code;
+    }
 }