KnowApplication.cs 8.2 KB

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