70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using APT.BaseData.Domain.IServices;
 | 
						|
using APT.Infrastructure.Core;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using APT.Infrastructure.Api;
 | 
						|
namespace APT.BaseData.Services.Sys
 | 
						|
{
 | 
						|
	public class FMOrganizationService: CommonService, IFMOrganizationService
 | 
						|
	{
 | 
						|
		public FMOrganizationService(IRepository repository)
 | 
						|
		   : base(repository)
 | 
						|
		{
 | 
						|
		} 
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// 重置组织缓存
 | 
						|
		/// </summary>
 | 
						|
		public void SetOrgCache()
 | 
						|
		{
 | 
						|
			var orgs = this.GetEntities<T_FM_ORGANIZATION>(t => t.ENABLE_STATUS==0, new BaseFilter()).ToList();
 | 
						|
			SysPermission sysPermission = APT.Infrastructure.Api.AppContext.SysPermission;
 | 
						|
			if (sysPermission == null)
 | 
						|
			{
 | 
						|
				sysPermission = new SysPermission();
 | 
						|
				APT.Infrastructure.Api.AppContext.SysPermission = sysPermission;
 | 
						|
			}
 | 
						|
			this.DoGetChildrenOrgCache(orgs, null, null, sysPermission);
 | 
						|
            foreach (var o in orgs)
 | 
						|
                sysPermission.OrgCodeCaches[o.CODE] = o.ID;
 | 
						|
		}
 | 
						|
 | 
						|
		private void DoGetChildrenOrgCache(List<T_FM_ORGANIZATION> orgList,
 | 
						|
				Guid? parentId, OrgCache parentCache, SysPermission sysPermission)
 | 
						|
		{
 | 
						|
			if (orgList == null || !orgList.Any()) return;
 | 
						|
			var tempOrgs = orgList.Where(t => t.PARENT_ID == parentId).ToList();
 | 
						|
			if (tempOrgs != null && tempOrgs.Any())
 | 
						|
			{
 | 
						|
				foreach (var item in tempOrgs)
 | 
						|
				{
 | 
						|
					OrgCache orgCache = new OrgCache();
 | 
						|
					orgCache.OrgId = item.ID;
 | 
						|
					orgCache.Code = item.CODE;
 | 
						|
					sysPermission.OrgCaches[item.ID] = orgCache;
 | 
						|
					if (parentCache != null)
 | 
						|
					{
 | 
						|
						parentCache.AllChildrenIds.Add(item.ID);
 | 
						|
						if (parentCache.AllParentIds != null && parentCache.AllParentIds.Any())
 | 
						|
						{
 | 
						|
							orgCache.AllParentIds.AddRange(parentCache.AllParentIds);
 | 
						|
							foreach(var pId in parentCache.AllParentIds)
 | 
						|
							{
 | 
						|
								OrgCache pOrgCache = null;
 | 
						|
								if (sysPermission.OrgCaches.TryGetValue(pId, out pOrgCache))
 | 
						|
								{
 | 
						|
									if (!pOrgCache.AllChildrenIds.Contains(item.ID))
 | 
						|
										pOrgCache.AllChildrenIds.Add(item.ID);
 | 
						|
								}
 | 
						|
							}
 | 
						|
						}
 | 
						|
						orgCache.AllParentIds.Add(parentCache.OrgId);
 | 
						|
					}
 | 
						|
					this.DoGetChildrenOrgCache(orgList, item.ID, orgCache, sysPermission);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |