Jelajahi Sumber

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

tangjiang 5 bulan lalu
induk
melakukan
2af2853a7a

+ 92 - 8
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
 
@@ -138,7 +143,7 @@ namespace Hotline.Api.Controllers
         /// <param name="IsEnable">不传查询所有</param>
         /// <returns></returns>
         [HttpGet("treelist")]
-        public async Task<List<KnowledgeTypeDto>> GetTreeList(bool? IsEnable)
+        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)
@@ -146,19 +151,98 @@ namespace Hotline.Api.Controllers
 				 .Select(x=> new KnowledgeTypeDto()
 				 {
                      Id = x.Id.SelectAll(),
-                     KnowledgeNum = SqlFunc.Subqueryable<KnowledgeRelationType>().Where(kr=>kr.KnowledgeTypeId == x.Id).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);
         }
 
         /// <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="name"></param>
+        /// <returns></returns>
+        [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);
+        }
+
+
+		/// <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

+ 2 - 2
src/Hotline.Api/Controllers/OrderController.cs

@@ -289,7 +289,7 @@ public class OrderController : BaseController
     public async Task<IList<PublishDto>> GetPublishOrderListAsync([FromQuery] QueryOrderPublishDto dto)
     { 
         var query = _orderApplication.GetPublishOrderList(dto);
-        return (await query.ToFixedListAsync(dto.QueryIndex, dto.PageSize, HttpContext.RequestAborted))
+        return (await query.ToFixedListAsync(dto.QueryIndex, 200, HttpContext.RequestAborted))
             .Adapt<List<PublishDto>>();
     }
 
@@ -664,7 +664,7 @@ public class OrderController : BaseController
     public async Task<IList<PublishedDto>> GetPublishedOrderListAsync([FromQuery] PublishedPagedRequest dto)
     {
         var query = _orderApplication.GetPublishedOrder(dto);
-        return (await query.ToFixedListAsync(dto.QueryIndex, dto.PageSize, HttpContext.RequestAborted))
+        return (await query.ToFixedListAsync(dto.QueryIndex, 200, HttpContext.RequestAborted))
             .Adapt<List<PublishedDto>>();
     }
 

+ 15 - 6
src/Hotline.Api/Controllers/SysController.cs

@@ -23,6 +23,7 @@ using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using NPOI.SS.Formula.Functions;
+using SqlSugar;
 using StackExchange.Redis;
 using Wex.Sdk;
 using XF.Domain.Authentications;
@@ -574,14 +575,22 @@ namespace Hotline.Api.Controllers
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpGet("log_list")]
-        public async Task<PagedDto<SystemLogDto>> List([FromQuery] PagedKeywordRequest dto)
+        public async Task<PagedDto<SystemLogDto>> List([FromQuery] SysLogPagedKeywordRequest dto)
         {
-            var (total, items) = await _systemLogRepository.Queryable()
-                .Where(x => !string.IsNullOrEmpty(x.Name))
-                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Name.Contains(dto.Keyword!) || x.CreatorName.Contains(dto.Keyword!))
-                .OrderByDescending(x => x.CreationTime)
-                .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+	        var (total, items) = await _systemLogRepository.Queryable()
+		        .WhereIF(dto.IsAll.HasValue && !dto.IsAll.Value, x => !string.IsNullOrEmpty(x.Name))
+		        .WhereIF(!string.IsNullOrEmpty(dto.Name), x => x.Name.Contains(dto.Name))
+		        .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), x => x.CreatorName.Contains(dto.CreatorName))
+		        .WhereIF(!string.IsNullOrEmpty(dto.ExecuteUrl), x => x.ExecuteUrl.Contains(dto.ExecuteUrl))
+		        .WhereIF(!string.IsNullOrEmpty(dto.ExecuteParam),
+			        x => SqlFunc.JsonLike(x.ExecuteParam, dto.ExecuteParam))
+		        .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue,
+			        x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+		        //.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Name.Contains(dto.Keyword!) || x.CreatorName.Contains(dto.Keyword!))
+		        .OrderByDescending(x => x.CreationTime)
+		        .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
             return new PagedDto<SystemLogDto>(total, _mapper.Map<IReadOnlyList<SystemLogDto>>(items));
+            
         }
 
         /// <summary>

+ 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; }
+
+	}
 }

+ 1 - 1
src/Hotline.Share/Dtos/Settings/SystemLogDto.cs

@@ -66,7 +66,7 @@ namespace Hotline.Share.Dtos.Settings
 		/// <summary>
 		/// 请求参数 
 		///</summary>
-		public string? ExecuteParam { get; set; }
+		public object? ExecuteParam { get; set; }
 		/// <summary>
 		/// 请求结果 
 		///</summary>

+ 28 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -1309,4 +1309,32 @@ public class HotspotStatisticsRep {
 
 	public int TypeId { get; set; }
 	public string? HotspotCode { get; set; }
+}
+
+public record SysLogPagedKeywordRequest : PagedKeywordRequest
+{
+    /// <summary>
+    /// 操作动作
+    /// </summary>
+	public string? Name { get; set; }
+
+    /// <summary>
+    /// 操作人
+    /// </summary>
+    public string? CreatorName { get; set; }
+
+    /// <summary>
+    /// 操作地址
+    /// </summary>
+    public string? ExecuteUrl { get; set; }
+
+    /// <summary>
+    /// 请求参数
+    /// </summary>
+    public string? ExecuteParam { get; set; }
+
+    /// <summary>
+    /// 是否查询全部
+    /// </summary>
+    public bool? IsAll { get; set; }
 }

+ 4 - 0
src/Hotline/KnowledgeBase/Knowledge.cs

@@ -8,6 +8,7 @@ using System.ComponentModel;
 using Hotline.Share.Dtos.File;
 using XF.Domain.Repository;
 using Hotline.Share.Dtos;
+using Hotline.Orders;
 
 namespace Hotline.KnowledgeBase;
 
@@ -15,6 +16,9 @@ namespace Hotline.KnowledgeBase;
 /// 知识库文档内容
 /// </summary>
 [Description("知识库文档")]
+[SugarIndex("index_knowledge_hotspotId", nameof(Knowledge.HotspotId), OrderByType.Desc)]
+[SugarIndex("index_knowledge_attribution", nameof(Knowledge.Attribution), OrderByType.Desc)]
+[SugarIndex("index_knowledge_creatorOrgId", nameof(Knowledge.CreatorOrgId), OrderByType.Desc)]
 public class Knowledge : WorkflowEntity//   WorkflowEntity  FullStateEntity
 {
 	///// <summary>

+ 3 - 0
src/Hotline/KnowledgeBase/KnowledgeRelationType.cs

@@ -13,6 +13,9 @@ namespace Hotline.KnowledgeBase
 	/// 知识库关联类型
 	/// </summary>
 	[Description("知识库关联类型")]
+	[SugarIndex("index_knowledgeRelationType_knowledgeId", nameof(KnowledgeRelationType.KnowledgeId), OrderByType.Desc)]
+	[SugarIndex("index_knowledgeRelationType_typeId", nameof(KnowledgeRelationType.KnowledgeTypeId), OrderByType.Desc)]
+	[SugarIndex("index_knowledgeRelationType_spliceName", nameof(KnowledgeRelationType.KnowledgeTypeSpliceName), OrderByType.Desc)]
 	public class KnowledgeRelationType : FullStateEntity
 	{
 		/// <summary>

+ 10 - 5
src/Hotline/Settings/Hotspots/Hotspot.cs

@@ -1,12 +1,17 @@
-using SqlSugar;
+using Hotline.KnowledgeBase;
+using SqlSugar;
+using System.ComponentModel;
 using XF.Domain.Repository;
 
 namespace Hotline.Settings.Hotspots
 {
-    /// <summary>
-    /// 热点基础数据
-    /// </summary>
-    public class Hotspot : CreationSoftDeleteEntity
+	/// <summary>
+	/// 热点基础数据
+	/// </summary>
+	[Description("热点")]
+	[SugarIndex("index_hotspot_parentId", nameof(Hotspot.ParentId), OrderByType.Desc)]
+	[SugarIndex("index_hotspot_fullName", nameof(Hotspot.HotSpotFullName), OrderByType.Desc)]
+	public class Hotspot : CreationSoftDeleteEntity
     {
         public string HotSpotName { get; set; }
         [SugarColumn(IsNullable = true)]

+ 2 - 0
src/Hotline/Settings/SystemOrganize.cs

@@ -1,4 +1,5 @@
 using Hotline.SeedData;
+using Hotline.Settings.Hotspots;
 using SqlSugar;
 using System.ComponentModel;
 using XF.Domain.Exceptions;
@@ -9,6 +10,7 @@ namespace Hotline.Settings;
 
 // [SugarIndex("unique_org_code", nameof(SystemOrganize.Code), OrderByType.Desc, true)]
 [Description("组织架构")]
+[SugarIndex("index_systemOrganize_parentId", nameof(SystemOrganize.ParentId), OrderByType.Desc)]
 public class SystemOrganize : CreationSoftDeleteEntity
 {
     // /// <summary>