Ver Fonte

Merge branch 'refactor/knowledge' into dev

xf há 4 meses atrás
pai
commit
7eacc1a0f2
1 ficheiros alterados com 93 adições e 74 exclusões
  1. 93 74
      src/Hotline.Api/Controllers/KnowledgeCommonController.cs

+ 93 - 74
src/Hotline.Api/Controllers/KnowledgeCommonController.cs

@@ -24,19 +24,19 @@ namespace Hotline.Api.Controllers
         private readonly IRepository<KnowledgeStandard> _knowledgeStandardRepository;
         private readonly IMapper _mapper;
         private readonly ISessionContext _sessionContext;
-		private readonly ISystemOrganizeRepository _systemOrganizeRepository;
-		private readonly IRepository<Hotspot> _hotspotTypeRepository;
+        private readonly ISystemOrganizeRepository _systemOrganizeRepository;
+        private readonly IRepository<Hotspot> _hotspotTypeRepository;
 
-		/// <summary>
-		/// 
-		/// </summary>
-		/// <param name="knowledgeTypeRepository"></param>
-		/// <param name="knowledgeTypeDomainService"></param>
-		/// <param name="knowledgeStandardRepository"></param>
-		/// <param name="mapper"></param>
-		public KnowledgeCommonController(IRepository<KnowledgeType> knowledgeTypeRepository, IKnowledgeTypeDomainService knowledgeTypeDomainService,
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="knowledgeTypeRepository"></param>
+        /// <param name="knowledgeTypeDomainService"></param>
+        /// <param name="knowledgeStandardRepository"></param>
+        /// <param name="mapper"></param>
+        public KnowledgeCommonController(IRepository<KnowledgeType> knowledgeTypeRepository, IKnowledgeTypeDomainService knowledgeTypeDomainService,
             IRepository<KnowledgeStandard> knowledgeStandardRepository, ISessionContext sessionContext,
-			IMapper mapper, ISystemOrganizeRepository systemOrganizeRepository, IRepository<Hotspot> hotspotTypeRepository)
+            IMapper mapper, ISystemOrganizeRepository systemOrganizeRepository, IRepository<Hotspot> hotspotTypeRepository)
         {
             _knowledgeTypeRepository = knowledgeTypeRepository;
             _knowledgeTypeDomainService = knowledgeTypeDomainService;
@@ -45,7 +45,7 @@ namespace Hotline.Api.Controllers
             _sessionContext = sessionContext;
             _systemOrganizeRepository = systemOrganizeRepository;
             _hotspotTypeRepository = hotspotTypeRepository;
-		}
+        }
         #endregion
 
         #region 知识分类
@@ -93,8 +93,8 @@ namespace Hotline.Api.Controllers
         public async Task<KnowledgeType> GetType(string Id)
         {
             var types = await _knowledgeTypeRepository.Queryable()
-                .Includes(x=>x.KnowledgeTypeOrgs)
-                .Where(x=>x.Id  == Id)
+                .Includes(x => x.KnowledgeTypeOrgs)
+                .Where(x => x.Id == Id)
                 .FirstAsync(HttpContext.RequestAborted);
             if (types is null)
                 throw UserFriendlyException.SameMessage("查询失败!");
@@ -140,23 +140,42 @@ namespace Hotline.Api.Controllers
         /// <param name="IsEnable">不传查询所有</param>
         /// <returns></returns>
         [HttpGet("treelist")]
-        public async Task<List<KnowledgeTypeDto>> GetTreeList(bool? IsEnable,string? Attribution)
+        public async Task<List<KnowledgeTypeDto>> GetTreeList(bool? IsEnable, string? Attribution)
         {
-            return await _knowledgeTypeRepository.Queryable().WhereIF(IsEnable.HasValue, x =>x.IsEnable == IsEnable)
-				 //.Where(x => x.KnowledgeTypeOrgs.Any(to => to.OrgId == _sessionContext.RequiredOrgId) || x.KnowledgeTypeOrgs.Any() == false)
-				 .Where(x=> SqlFunc.Subqueryable<KnowledgeTypeOrg>().Where(to=>to.TypeId == x.Id && to.OrgId == _sessionContext.RequiredOrgId).Any()
-				 || SqlFunc.Subqueryable<KnowledgeTypeOrg>().Where(to => to.TypeId == x.Id).NotAny())
-				 .Select(x=> new KnowledgeTypeDto()
-				 {
+            var query = _knowledgeTypeRepository.Queryable();
+            if (!_sessionContext.OrgIsCenter)
+                query.Where(d => d.Orgs.Any(s => s.Id == _sessionContext.RequiredOrgId));
+            return await query.WhereIF(IsEnable.HasValue, x => x.IsEnable == IsEnable)
+                 .Select(x => new KnowledgeTypeDto()
+                 {
                      Id = x.Id.SelectAll(),
-                     KnowledgeNum = SqlFunc.Subqueryable<KnowledgeRelationType>().LeftJoin<Knowledge>((kr,k)=> kr.KnowledgeId == k.Id)
-	                     .Where((kr, k)=>kr.KnowledgeTypeSpliceName.StartsWith(x.SpliceName))
-	                     .WhereIF(!string.IsNullOrEmpty(Attribution),(kr,k)=>k.Attribution == Attribution).DistinctCount(kr=>kr.KnowledgeId)
+                     KnowledgeNum = SqlFunc.Subqueryable<KnowledgeRelationType>().LeftJoin<Knowledge>((kr, k) => kr.KnowledgeId == k.Id)
+                         .Where((kr, k) => kr.KnowledgeTypeSpliceName.StartsWith(x.SpliceName))
+                         .WhereIF(!string.IsNullOrEmpty(Attribution), (kr, k) => k.Attribution == Attribution).DistinctCount(kr => kr.KnowledgeId)
 
-				 })
-				 .OrderBy(x => x.Sort).ToTreeAsync(it => it.children, it => it.ParentId, null,it=> it.Id);
+                 })
+                 .OrderBy(x => x.Sort)
+                 .ToTreeAsync(it => it.children, it => it.ParentId, null, it => it.Id);
         }
 
+        //[HttpGet("treelist")]
+        //public async Task<List<KnowledgeTypeDto>> GetTreeList(bool? IsEnable, string? Attribution)
+        //{
+        //    return await _knowledgeTypeRepository.Queryable()
+        //        .WhereIF(IsEnable.HasValue, x => x.IsEnable == IsEnable)
+        //        .Where(x => SqlFunc.Subqueryable<KnowledgeTypeOrg>().Where(to => to.TypeId == x.Id && to.OrgId == _sessionContext.RequiredOrgId).Any()
+        //                    || SqlFunc.Subqueryable<KnowledgeTypeOrg>().Where(to => to.TypeId == x.Id).NotAny())
+        //        .Select(x => new KnowledgeTypeDto()
+        //        {
+        //            Id = x.Id.SelectAll(),
+        //            KnowledgeNum = SqlFunc.Subqueryable<KnowledgeRelationType>().LeftJoin<Knowledge>((kr, k) => kr.KnowledgeId == k.Id)
+        //                .Where((kr, k) => kr.KnowledgeTypeSpliceName.StartsWith(x.SpliceName))
+        //                .WhereIF(!string.IsNullOrEmpty(Attribution), (kr, k) => k.Attribution == Attribution).DistinctCount(kr => kr.KnowledgeId)
+
+        //        })
+        //        .OrderBy(x => x.Sort).ToTreeAsync(it => it.children, it => it.ParentId, null, it => it.Id);
+        //}
+
         /// <summary>
         /// 知识部门
         /// </summary>
@@ -166,25 +185,25 @@ namespace Hotline.Api.Controllers
         public async Task<List<KnowledgeOrgDto>> GetTreeList(string? Attribution)
         {
 
-	        //await Db.Queryable<SystemOrganize>()
-		       // .Where(it => it.Id.StartsWith(orgCode))
-		       // .OrderBy(d => d.Id)
-		       // .ToTreeAsync(it => it.Children, it => it.ParentId, orgCode.Length > 6 ? orgCode.Substring(0, orgCode.Length - 3) : null);
-	        var orgCode = _sessionContext.RequiredOrgId;
-			var query=  _systemOrganizeRepository.Queryable().WhereIF(!_sessionContext.OrgIsCenter, it => it.Id.StartsWith(_sessionContext.RequiredOrgId))
-					.Select(it=> new KnowledgeOrgDto()
-					{
-						Id = it.Id.SelectAll(),
-						KnowledgeNum = SqlFunc.Subqueryable<Knowledge>()
-							.Where(k => k.CreatorOrgId.StartsWith(it.Id))
-							.WhereIF(!string.IsNullOrEmpty(Attribution),  k => k.Attribution == Attribution).DistinctCount(k => k.Id)
+            //await Db.Queryable<SystemOrganize>()
+            // .Where(it => it.Id.StartsWith(orgCode))
+            // .OrderBy(d => d.Id)
+            // .ToTreeAsync(it => it.Children, it => it.ParentId, orgCode.Length > 6 ? orgCode.Substring(0, orgCode.Length - 3) : null);
+            var orgCode = _sessionContext.RequiredOrgId;
+            var query = _systemOrganizeRepository.Queryable().WhereIF(!_sessionContext.OrgIsCenter, it => it.Id.StartsWith(_sessionContext.RequiredOrgId))
+                    .Select(it => new KnowledgeOrgDto()
+                    {
+                        Id = it.Id.SelectAll(),
+                        KnowledgeNum = SqlFunc.Subqueryable<Knowledge>()
+                            .Where(k => k.CreatorOrgId.StartsWith(it.Id))
+                            .WhereIF(!string.IsNullOrEmpty(Attribution), k => k.Attribution == Attribution).DistinctCount(k => k.Id)
 
-					}).OrderBy(d => d.Id);
+                    }).OrderBy(d => d.Id);
 
-			if (_sessionContext.OrgIsCenter)
-			{
-				return await query.ToTreeAsync(x => x.Children, it => it.ParentId, null);
-			}
+            if (_sessionContext.OrgIsCenter)
+            {
+                return await query.ToTreeAsync(x => x.Children, it => it.ParentId, null);
+            }
             return await query.ToTreeAsync(it => it.Children, it => it.ParentId, orgCode.Length > 6 ? orgCode.Substring(0, orgCode.Length - 3) : null);
 
         }
@@ -195,20 +214,20 @@ namespace Hotline.Api.Controllers
         [HttpGet("treelist/hotspot")]
         public async Task<IReadOnlyList<KnowledgeHotSpotDto>> GetChildren([FromQuery] string? id, string? Attribution)
         {
-	        var list = await _hotspotTypeRepository.Queryable()
-		        .WhereIF(!string.IsNullOrEmpty(id), x => x.ParentId == id)
-		        .WhereIF(string.IsNullOrEmpty(id), x => x.ParentId == null || x.ParentId == "")
-		        .OrderBy(d => d.HotSpotName)
-		        .Select(x => new KnowledgeHotSpotDto
-				{
-					Id = x.Id.SelectAll(),
-					HasChild = SqlFunc.Subqueryable<Hotspot>().Where(d => d.ParentId == x.Id).NotAny(),
-					KnowledgeNum = SqlFunc.Subqueryable<Knowledge>().LeftJoin<Hotspot>((k,h)=>k.HotspotId == h.Id)
-						.Where((k,h) =>h.HotSpotFullName.StartsWith(x.HotSpotFullName))
-						.WhereIF(!string.IsNullOrEmpty(Attribution), (k,h) => k.Attribution == Attribution).DistinctCount(k => k.Id)
-				}).ToListAsync();
+            var list = await _hotspotTypeRepository.Queryable()
+                .WhereIF(!string.IsNullOrEmpty(id), x => x.ParentId == id)
+                .WhereIF(string.IsNullOrEmpty(id), x => x.ParentId == null || x.ParentId == "")
+                .OrderBy(d => d.HotSpotName)
+                .Select(x => new KnowledgeHotSpotDto
+                {
+                    Id = x.Id.SelectAll(),
+                    HasChild = SqlFunc.Subqueryable<Hotspot>().Where(d => d.ParentId == x.Id).NotAny(),
+                    KnowledgeNum = SqlFunc.Subqueryable<Knowledge>().LeftJoin<Hotspot>((k, h) => k.HotspotId == h.Id)
+                        .Where((k, h) => h.HotSpotFullName.StartsWith(x.HotSpotFullName))
+                        .WhereIF(!string.IsNullOrEmpty(Attribution), (k, h) => k.Attribution == Attribution).DistinctCount(k => k.Id)
+                }).ToListAsync();
 
-	        return list;
+            return list;
         }
 
 
@@ -220,27 +239,27 @@ namespace Hotline.Api.Controllers
         [HttpGet("treelist/children-hasname")]
         public async Task<IReadOnlyList<KnowledgeHotSpotDto>> GetChildrenHasName([FromQuery] string Name, string? Attribution)
         {
-	        var arr = _hotspotTypeRepository.Queryable()
-		        .WhereIF(!string.IsNullOrEmpty(Name), x => x.HotSpotFullName.Contains(Name)).Select(x => x.Id).ToList().Cast<object>().ToArray();
-	        //.ToTreeAsync(x => x.Children, it => it.ParentId, null);
-	        return await _hotspotTypeRepository.Queryable().Select(x => new KnowledgeHotSpotDto
-			{
-				Id = x.Id.SelectAll(),
-				HasChild = SqlFunc.Subqueryable<Hotspot>().Where(d => d.ParentId == x.Id).NotAny(),
-				KnowledgeNum = SqlFunc.Subqueryable<Knowledge>().LeftJoin<Hotspot>((k, h) => k.HotspotId == h.Id)
-					.Where((k, h) => h.HotSpotFullName.StartsWith(x.HotSpotFullName))
-					.WhereIF(!string.IsNullOrEmpty(Attribution), (k, h) => k.Attribution == Attribution).DistinctCount(k => k.Id)
-			}).ToTreeAsync(x => x.Children, it => it.ParentId, "", arr);
+            var arr = _hotspotTypeRepository.Queryable()
+                .WhereIF(!string.IsNullOrEmpty(Name), x => x.HotSpotFullName.Contains(Name)).Select(x => x.Id).ToList().Cast<object>().ToArray();
+            //.ToTreeAsync(x => x.Children, it => it.ParentId, null);
+            return await _hotspotTypeRepository.Queryable().Select(x => new KnowledgeHotSpotDto
+            {
+                Id = x.Id.SelectAll(),
+                HasChild = SqlFunc.Subqueryable<Hotspot>().Where(d => d.ParentId == x.Id).NotAny(),
+                KnowledgeNum = SqlFunc.Subqueryable<Knowledge>().LeftJoin<Hotspot>((k, h) => k.HotspotId == h.Id)
+                    .Where((k, h) => h.HotSpotFullName.StartsWith(x.HotSpotFullName))
+                    .WhereIF(!string.IsNullOrEmpty(Attribution), (k, h) => k.Attribution == Attribution).DistinctCount(k => k.Id)
+            }).ToTreeAsync(x => x.Children, it => it.ParentId, "", arr);
         }
 
 
-		/// <summary>
-		/// 知识分类- 只获取一级
-		/// </summary>
-		/// <param name="ParentId">不传默认查询第一级</param>
-		/// <param name="IsEnable">不传查询所有,包含已经禁用的</param>
-		/// <returns></returns>
-		[HttpGet("typelist")]
+        /// <summary>
+        /// 知识分类- 只获取一级
+        /// </summary>
+        /// <param name="ParentId">不传默认查询第一级</param>
+        /// <param name="IsEnable">不传查询所有,包含已经禁用的</param>
+        /// <returns></returns>
+        [HttpGet("typelist")]
         public async Task<List<KnowledgeType>> GetTypeList(string? ParentId, bool? IsEnable)
         {
             return await _knowledgeTypeRepository