KnowApplication.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using Hotline.KnowledgeBase;
  2. using Hotline.Repository.SqlSugar.Extensions;
  3. using Hotline.Settings;
  4. using Hotline.Settings.Hotspots;
  5. using Hotline.Share.Dtos;
  6. using Hotline.Share.Dtos.Knowledge;
  7. using Hotline.Share.Enums.KnowledgeBase;
  8. using Hotline.Users;
  9. using MapsterMapper;
  10. using SqlSugar;
  11. using XF.Domain.Authentications;
  12. using XF.Domain.Dependency;
  13. namespace Hotline.Application.Knowledge
  14. {
  15. public class KnowApplication : IKnowApplication, IScopeDependency
  16. {
  17. private readonly IKnowledgeRepository _knowledgeRepository;
  18. private readonly IKnowledgeApplyRepository _knowledgeApplyRepository;
  19. private readonly ISessionContext _sessionContext;
  20. private readonly IMapper _mapper;
  21. /// <summary>
  22. ///
  23. /// </summary>
  24. /// <param name="knowledgeRepository"></param>
  25. /// <param name="knowledgeApplyRepository"></param>
  26. /// <param name="sessionContext"></param>
  27. /// <param name="knowledgeDomainService"></param>
  28. /// <param name="mapper"></param>
  29. public KnowApplication(IKnowledgeRepository knowledgeRepository, IKnowledgeApplyRepository knowledgeApplyRepository, ISessionContext sessionContext, IMapper mapper)
  30. {
  31. _knowledgeRepository = knowledgeRepository;
  32. _knowledgeApplyRepository = knowledgeApplyRepository;
  33. _sessionContext = sessionContext;
  34. _mapper = mapper;
  35. }
  36. /// <summary>
  37. /// 知识库查询
  38. /// </summary>
  39. /// <param name="pagedDto"></param>
  40. /// <returns></returns>
  41. public async Task<PagedDto<KnowledgeDataDto>> GetKnowList(KnowPagedListDto pagedDto)
  42. {
  43. RefAsync<int> total = 0;
  44. var temp = await _knowledgeRepository
  45. .Queryable()
  46. .LeftJoin<User>((o, cus) => o.CreatorId == cus.Id)
  47. .LeftJoin<SystemOrganize>((o, cus, sys) => o.CreatorOrgId == sys.Id)
  48. .LeftJoin<KnowledgeType>((o, cus, sys, kn) => o.KnowledgeTypeId == kn.Id)
  49. .LeftJoin<HotSpotType>((o, cus, sys, kn, hst) => o.HotspotId == hst.Id)
  50. .Where((o, cus, sys, kn, hst) => o.IsDeleted == false)
  51. //关键词查询标题、创建人、创建部门
  52. .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), (o, cus, sys, kn, hst) => o.Title.Contains(pagedDto.Keyword!) || cus.Name.Contains(pagedDto.Keyword!) || sys.OrgName.Contains(pagedDto.Keyword!))
  53. //分类
  54. .WhereIF(!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId), (o, cus, sys, kn, hst) => o.KnowledgeTypeId == pagedDto.KnowledgeTypeId)
  55. //热点
  56. .WhereIF(!string.IsNullOrEmpty(pagedDto.HotspotId), (o, cus, sys, kn, hst) => o.HotspotId == pagedDto.HotspotId)
  57. //部门
  58. .WhereIF(!string.IsNullOrEmpty(pagedDto.CreateOrgId), (o, cus, sys, kn, hst) => o.CreatorOrgId == pagedDto.CreateOrgId)
  59. //状态
  60. .WhereIF(pagedDto.Status.HasValue, (o, cus, sys, kn, hst) => o.Status == pagedDto.Status)
  61. //创建时间
  62. .WhereIF(pagedDto.CreationStartTime.HasValue, (o, cus, sys, kn, hst) => o.CreationTime >= pagedDto.CreationStartTime)
  63. .WhereIF(pagedDto.CreationEndTime.HasValue, (o, cus, sys, kn, hst) => o.CreationTime <= pagedDto.CreationEndTime)
  64. //上架时间
  65. .WhereIF(pagedDto.StartOnShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OnShelfTime >= pagedDto.StartOnShelfTime)
  66. .WhereIF(pagedDto.EndOnShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OnShelfTime <= pagedDto.EndOnShelfTime)
  67. //下架时间
  68. .WhereIF(pagedDto.StartOffShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OffShelfTime >= pagedDto.StartOffShelfTime)
  69. .WhereIF(pagedDto.EndOffShelfTime.HasValue, (o, cus, sys, kn, hst) => o.OffShelfTime <= pagedDto.EndOffShelfTime)
  70. //重新构建数据
  71. .Select((o, cus, sys, kn, hst) => new
  72. {
  73. index = SqlFunc.RowNumber($"{o.Version} desc ", $"{o.Code}"),
  74. CreationName = cus.Name,
  75. CreationBMName = sys.OrgName,
  76. KnowledgeTypeName = kn.SpliceName,
  77. HotspotName = hst.HotSpotFullName,
  78. o.Id,
  79. o.Code,
  80. o.Title,
  81. o.Version,
  82. o.KnowledgeTypeId,
  83. o.IsDeleted,
  84. o.HotspotId,
  85. o.OnShelfTime,
  86. o.CreationTime,
  87. o.PageView,
  88. o.Status,
  89. o.OffShelfTime,
  90. o.LastModificationTime
  91. })
  92. //将结果合并成一个表
  93. .MergeTable()
  94. //取第一条数据
  95. .Where(d => d.index == 1)
  96. .OrderByDescending(d => d.CreationTime)
  97. //转分页数据
  98. .ToPageListAsync(pagedDto.PageIndex, pagedDto.PageSize, total);
  99. //返回数据
  100. return new PagedDto<KnowledgeDataDto>(total.Value, _mapper.Map<IReadOnlyList<KnowledgeDataDto>>(temp));
  101. }
  102. /// <summary>
  103. /// 知识申请查询
  104. /// </summary>
  105. /// <param name="pagedDto"></param>
  106. /// <param name="cancellationToken"></param>
  107. /// <returns></returns>
  108. public async Task<PagedDto<KnowledgeApplyHandlePageDto>> GetApplyList(KnowledgeApplyPagedDto pagedDto, CancellationToken cancellationToken)
  109. {
  110. var (total, items) = await _knowledgeApplyRepository
  111. .Queryable()
  112. .Includes(it => it.User)
  113. .Includes(it => it.SystemOrganize)
  114. .Where(d => d.CreatorId == _sessionContext.RequiredUserId)
  115. .WhereIF(pagedDto.Status.HasValue, d => d.Status == pagedDto.Status)
  116. .WhereIF(pagedDto.ApplyType.HasValue, d => d.KnowledgeApplyType == pagedDto.ApplyType)
  117. .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "0", d => d.IsOvertime == true)
  118. .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "1", d => d.IsOvertime == false)
  119. .WhereIF(pagedDto.StartTime.HasValue, d => d.CreationTime >= pagedDto.StartTime)
  120. .WhereIF(pagedDto.EndTime.HasValue, d => d.CreationTime <= pagedDto.EndTime)
  121. .OrderByDescending(p => p.CreationTime)
  122. .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
  123. return new PagedDto<KnowledgeApplyHandlePageDto>(total, _mapper.Map<IReadOnlyList<KnowledgeApplyHandlePageDto>>(items));
  124. }
  125. /// <summary>
  126. /// 申请处理查询
  127. /// </summary>
  128. /// <param name="pagedDto"></param>
  129. /// <param name="cancellationToken"></param>
  130. /// <returns></returns>
  131. public async Task<PagedDto<KnowledgeApplyHandlePageDto>> GetApplyHandleList(KnowledgeHandlePagedDto pagedDto, CancellationToken cancellationToken)
  132. {
  133. var (total, items) = await _knowledgeApplyRepository
  134. .Queryable()
  135. .Includes(it => it.User)
  136. .Includes(it => it.SystemOrganize)
  137. .Where(p => p.DepartmentId == _sessionContext.RequiredOrgId)
  138. .WhereIF(pagedDto.Status.HasValue, d => d.Status == pagedDto.Status)
  139. .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), d => d.User.Name.Contains(pagedDto.Keyword!) || d.SystemOrganize.OrgName.Contains(pagedDto.Keyword!))
  140. .WhereIF(pagedDto.ApplyType.HasValue, d => d.KnowledgeApplyType == pagedDto.ApplyType)
  141. .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "0", d => d.IsOvertime == true)
  142. .WhereIF(!string.IsNullOrEmpty(pagedDto.IsOvertime) && pagedDto.IsOvertime == "1", d => d.IsOvertime == false)
  143. .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status != EKnowledgeApplyStatus.Failed && pagedDto.Status != EKnowledgeApplyStatus.Succeed, d => d.CreationTime >= pagedDto.StartTime)
  144. .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status != EKnowledgeApplyStatus.Failed && pagedDto.Status != EKnowledgeApplyStatus.Succeed, d => d.CreationTime <= pagedDto.EndTime)
  145. .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Failed , d => d.ReturnTime >= pagedDto.StartTime)
  146. .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Failed , d => d.ReturnTime <= pagedDto.EndTime)
  147. .WhereIF(pagedDto.StartTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Succeed, d => d.HandleTime >= pagedDto.StartTime)
  148. .WhereIF(pagedDto.EndTime.HasValue && pagedDto.Status == EKnowledgeApplyStatus.Succeed, d => d.HandleTime <= pagedDto.EndTime)
  149. .OrderByDescending(p => p.CreationTime)
  150. .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
  151. return new PagedDto<KnowledgeApplyHandlePageDto>(total, _mapper.Map<IReadOnlyList<KnowledgeApplyHandlePageDto>>(items));
  152. }
  153. }
  154. }