ソースを参照

知识库调整

田爽 5 ヶ月 前
コミット
1eb3d6fe79

+ 66 - 6
src/Hotline.Api/Controllers/KnowledgeCommonController.cs

@@ -1,5 +1,7 @@
 using Hotline.KnowledgeBase;
 using Hotline.Permissions;
+using Hotline.Settings;
+using Hotline.Settings.Hotspots;
 using Hotline.Share.Dtos.Knowledge;
 using MapsterMapper;
 using Microsoft.AspNetCore.Mvc;
@@ -22,6 +24,8 @@ 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;
 
 		/// <summary>
 		/// 
@@ -32,14 +36,15 @@ namespace Hotline.Api.Controllers
 		/// <param name="mapper"></param>
 		public KnowledgeCommonController(IRepository<KnowledgeType> knowledgeTypeRepository, IKnowledgeTypeDomainService knowledgeTypeDomainService,
             IRepository<KnowledgeStandard> knowledgeStandardRepository, ISessionContext sessionContext,
-			IMapper mapper)
+			IMapper mapper, ISystemOrganizeRepository systemOrganizeRepository, IRepository<Hotspot> hotspotTypeRepository)
         {
             _knowledgeTypeRepository = knowledgeTypeRepository;
             _knowledgeTypeDomainService = knowledgeTypeDomainService;
             _knowledgeStandardRepository = knowledgeStandardRepository;
             _mapper = mapper;
             _sessionContext = sessionContext;
-
+            _systemOrganizeRepository = systemOrganizeRepository;
+            _hotspotTypeRepository = hotspotTypeRepository;
 		}
         #endregion
 
@@ -155,12 +160,67 @@ namespace Hotline.Api.Controllers
         }
 
         /// <summary>
-        /// 知识分类- 只获取一级
+        /// 知识部门
         /// </summary>
-        /// <param name="ParentId">不传默认查询第一级</param>
-        /// <param name="IsEnable">不传查询所有,包含已经禁用的</param>
+        /// <param name="IsEnable">不传查询所有</param>
         /// <returns></returns>
-        [HttpGet("typelist")]
+        [HttpGet("treelist/org")]
+        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)
+
+					}).OrderBy(d => d.Id);
+
+			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);
+
+        }
+
+        /// <summary>
+        /// 查询子项
+        /// </summary>
+        [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();
+
+	        return list;
+        }
+
+
+		/// <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

+ 1 - 1
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -97,7 +97,7 @@ namespace Hotline.Application.Knowledge
                 .WhereIF(!string.IsNullOrEmpty(pagedDto.Summary), x => x.Summary != null && x.Summary.Contains(pagedDto.Summary!))
                 .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.Any(t => t.KnowledgeTypeSpliceName.StartsWith(typeSpliceName)))
                 .WhereIF(!string.IsNullOrEmpty(hotspotHotSpotFullName), x => x.HotspotType.HotSpotFullName.EndsWith(hotspotHotSpotFullName!))
-                .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateOrgId), x => x.SourceOrganizeId != null && x.SourceOrganizeId.EndsWith(pagedDto.CreateOrgId!))
+                .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateOrgId), x => x.CreatorOrgId != null && x.CreatorOrgId.StartsWith(pagedDto.CreateOrgId!))
                 .WhereIF(!string.IsNullOrEmpty(pagedDto.ModuleCode), x => x.Workflow.ModuleCode == pagedDto.ModuleCode)
                 .WhereIF(pagedDto.Status ==  EKnowledgeStatus.NewDrafts ,x=>x.Status == EKnowledgeStatus.Drafts || x.Status == EKnowledgeStatus.Revert)
                 .WhereIF(pagedDto.NewDraftsStatus is EKnowledgeStatus.Drafts , x=>x.Status == EKnowledgeStatus.Drafts)

+ 102 - 1
src/Hotline.Share/Dtos/Knowledge/KnowledgeTypeDto.cs

@@ -1,4 +1,7 @@
-namespace Hotline.Share.Dtos.Knowledge
+using Hotline.Settings;
+using XF.Utility.EnumExtensions;
+
+namespace Hotline.Share.Dtos.Knowledge
 {
     /// <summary>
     /// 编辑
@@ -85,4 +88,102 @@
 
         public int KnowledgeNum { get; set; }
 	}
+
+    public record KnowledgeOrgDto
+    {
+	    /// <summary>
+	    /// ID
+	    /// </summary>
+	    public string Id { get; set; }
+
+		/// <summary>
+		/// 组织架构名称
+		/// </summary>
+		public string Name { get; set; }
+
+	    /// <summary>
+	    /// 组织架构简称
+	    /// </summary>
+	    public string ShortName { get; set; }
+
+	    /// <summary>
+	    /// 区域Code(行政区域代码)
+	    /// </summary>
+	    public string? AreaCode { get; set; }
+
+	    /// <summary>
+	    /// 区域名称(行政区域名称)
+	    /// </summary>
+	    public string? AreaName { get; set; }
+
+	    /// <summary>
+	    /// 部门级别
+	    /// </summary>
+	    public int Level { get; set; }
+
+	    /// <summary>
+	    /// 部门类型
+	    /// </summary>
+	    public EOrgType OrgType { get; set; }
+
+	    /// <summary>
+	    /// 上级ID
+	    /// </summary>
+	    public string? ParentId { get; set; }
+
+	    /// <summary>
+	    /// 上级名称
+	    /// </summary>
+	    public string? ParentName { get; set; }
+
+	    /// <summary>
+	    /// 是否启用
+	    /// </summary>
+	    public bool IsEnable { get; set; }
+
+	    /// <summary>
+	    /// 是否为中心
+	    /// </summary>
+	    public bool IsCenter { get; set; }
+
+	    public List<KnowledgeOrgDto> Children { get; set; }
+
+	    public string OrgTypeText => OrgType.GetDescription();
+
+
+	    /// <summary>
+	    /// 旧系统id
+	    /// </summary>
+	    public int? oldBmid { get; set; }
+
+	    public int KnowledgeNum { get; set; }
+	}
+
+    public record KnowledgeHotSpotDto
+    {
+	    /// <summary>
+	    /// ID
+	    /// </summary>
+	    public string Id { get; set; }
+
+	    public int KnowledgeNum { get; set; }
+
+		public string HotSpotName { get; set; }
+	    public string ParentId { get; set; }
+	    public string PYCode { get; set; }
+
+	    public string FullPYCode { get; set; }
+	    public string ProvinceCode { get; set; }
+	    public int OrderBy { get; set; }
+	    public string TrunkNum { get; set; }
+	    /// <summary>
+	    /// 生成的时候写入
+	    /// </summary>
+	    public string HotSpotFullName { get; set; }
+
+	    public List<KnowledgeHotSpotDto> Children { get; set; }
+
+	    public bool HasChild { get; set; }
+
+	}
 }