|
@@ -38,15 +38,15 @@ namespace Hotline.Application.Knowledge
|
|
|
private readonly IMapper _mapper;
|
|
|
private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
|
|
|
|
|
|
- /// <summary>
|
|
|
- ///
|
|
|
- /// </summary>
|
|
|
- /// <param name="knowledgeRepository"></param>
|
|
|
- /// <param name="knowledgeApplyRepository"></param>
|
|
|
- /// <param name="sessionContext"></param>
|
|
|
- /// <param name="knowledgeDomainService"></param>
|
|
|
- /// <param name="mapper"></param>
|
|
|
- public KnowApplication(IKnowledgeRepository knowledgeRepository, IOptionsSnapshot<AppConfiguration> appOptions, IRepository<KnowledgeApply> knowledgeApplyRepository, ISessionContext sessionContext, IMapper mapper, IRepository<KnowledgeType> knowledgeTypeRepository, IRepository<Hotspot> hotspotTypeRepository, IRepository<KnowledgeWord> knowledgeWordRepository, IRepository<KnowledgePv> knowledgePvepository, IRepository<KnowledgeHotWord> knowledgeHotWordRepository)
|
|
|
+ /// <summary>
|
|
|
+ ///
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="knowledgeRepository"></param>
|
|
|
+ /// <param name="knowledgeApplyRepository"></param>
|
|
|
+ /// <param name="sessionContext"></param>
|
|
|
+ /// <param name="knowledgeDomainService"></param>
|
|
|
+ /// <param name="mapper"></param>
|
|
|
+ public KnowApplication(IKnowledgeRepository knowledgeRepository, IOptionsSnapshot<AppConfiguration> appOptions, IRepository<KnowledgeApply> knowledgeApplyRepository, ISessionContext sessionContext, IMapper mapper, IRepository<KnowledgeType> knowledgeTypeRepository, IRepository<Hotspot> hotspotTypeRepository, IRepository<KnowledgeWord> knowledgeWordRepository, IRepository<KnowledgePv> knowledgePvepository, IRepository<KnowledgeHotWord> knowledgeHotWordRepository)
|
|
|
{
|
|
|
_knowledgeRepository = knowledgeRepository;
|
|
|
_knowledgeApplyRepository = knowledgeApplyRepository;
|
|
@@ -57,9 +57,9 @@ namespace Hotline.Application.Knowledge
|
|
|
_knowledgeWordRepository = knowledgeWordRepository;
|
|
|
_knowledgePvepository = knowledgePvepository;
|
|
|
_knowledgeHotWordRepository = knowledgeHotWordRepository;
|
|
|
- _appOptions = appOptions;
|
|
|
+ _appOptions = appOptions;
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 知识库查询
|
|
@@ -68,17 +68,17 @@ namespace Hotline.Application.Knowledge
|
|
|
/// <returns></returns>
|
|
|
public async Task<(int, IList<KnowledgeDataDto>)> GetKnowList(KnowPagedListDto pagedDto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- if (!_sessionContext.OrgIsCenter)
|
|
|
- {
|
|
|
- pagedDto.Attribution = "部门知识库";
|
|
|
- }
|
|
|
+ if (!_sessionContext.OrgIsCenter)
|
|
|
+ {
|
|
|
+ pagedDto.Attribution = "部门知识库";
|
|
|
+ }
|
|
|
|
|
|
- if (_appOptions.Value.IsZiGong || _appOptions.Value.IsLuZhou)
|
|
|
- {
|
|
|
- pagedDto.Attribution = string.Empty;
|
|
|
- }
|
|
|
+ if (_appOptions.Value.IsZiGong || _appOptions.Value.IsLuZhou)
|
|
|
+ {
|
|
|
+ pagedDto.Attribution = string.Empty;
|
|
|
+ }
|
|
|
|
|
|
- var typeSpliceName = string.Empty;
|
|
|
+ var typeSpliceName = string.Empty;
|
|
|
var hotspotHotSpotFullName = string.Empty;
|
|
|
if (!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId))
|
|
|
{
|
|
@@ -91,8 +91,62 @@ namespace Hotline.Application.Knowledge
|
|
|
hotspotHotSpotFullName = hotspot?.HotSpotFullName;
|
|
|
}
|
|
|
|
|
|
+ var query = _knowledgeRepository.Queryable();
|
|
|
+
|
|
|
+ switch (pagedDto.Status)
|
|
|
+ {
|
|
|
+ case EKnowledgeStatusRequest.OnShelf:
|
|
|
+ query.Where(d => d.Status == EKnowledgeStatus.OnShelf
|
|
|
+ || d.ExpiredTime == null
|
|
|
+ || (d.ExpiredTime != null && d.ExpiredTime > DateTime.Now));
|
|
|
+ break;
|
|
|
+ case EKnowledgeStatusRequest.OffShelf:
|
|
|
+ query.Where(d => d.Status == EKnowledgeStatus.OffShelf
|
|
|
+ || (d.ExpiredTime != null && d.ExpiredTime <= DateTime.Now && d.Status != EKnowledgeStatus.Drafts));
|
|
|
+ break;
|
|
|
+ case EKnowledgeStatusRequest.Auditing:
|
|
|
+ query.Where(d => d.Status == EKnowledgeStatus.Auditing);
|
|
|
+ switch (pagedDto.ModuleCode)
|
|
|
+ {
|
|
|
+ case "add":
|
|
|
+ query.Where(d => d.KnowledgeApproves.Any(x => x.KnowledgeApproveType == EKnowledgeApproveType.Add));
|
|
|
+ break;
|
|
|
+ case "update":
|
|
|
+ query.Where(d => d.KnowledgeApproves.Any(x => x.KnowledgeApproveType == EKnowledgeApproveType.Update));
|
|
|
+ break;
|
|
|
+ case "delete":
|
|
|
+ query.Where(d => d.KnowledgeApproves.Any(x => x.KnowledgeApproveType == EKnowledgeApproveType.Delete));
|
|
|
+ break;
|
|
|
+ case "offshelf":
|
|
|
+ query.Where(d => d.KnowledgeApproves.Any(x => x.KnowledgeApproveType == EKnowledgeApproveType.OffShelf));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case EKnowledgeStatusRequest.Drafts:
|
|
|
+ switch (pagedDto.NewDraftsStatus)
|
|
|
+ {
|
|
|
+ case EKnowledgeDraftTypeRequest.All:
|
|
|
+ query.Where(d => (d.Status == EKnowledgeStatus.Drafts && d.CreatorId == _sessionContext.UserId)
|
|
|
+ || d.Status == EKnowledgeStatus.Revert);
|
|
|
+ break;
|
|
|
+ case EKnowledgeDraftTypeRequest.UnApproval:
|
|
|
+ query.Where(d => (d.Status == EKnowledgeStatus.Drafts && d.CreatorId == _sessionContext.UserId));
|
|
|
+ break;
|
|
|
+ case EKnowledgeDraftTypeRequest.Failed:
|
|
|
+ query.Where(d => d.Status == EKnowledgeStatus.Revert);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case EKnowledgeStatusRequest.All:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- var (total, temp) = await _knowledgeRepository.Queryable(false, false, false)
|
|
|
+ var (total, temp) = await query
|
|
|
.Includes(x => x.User)
|
|
|
.Includes(x => x.SystemOrganize)
|
|
|
.Includes(x => x.SourceOrganize)
|
|
@@ -101,24 +155,24 @@ namespace Hotline.Application.Knowledge
|
|
|
.Includes(x => x.KnowledgeType)
|
|
|
.Where(x => x.IsDeleted == false)
|
|
|
.Where(x => x.KnowledgeType.Any(t => t.KnowledgeType.KnowledgeTypeOrgs.Any(to => to.OrgId == _sessionContext.RequiredOrgId) || t.KnowledgeType.KnowledgeTypeOrgs.Any() == false))
|
|
|
- .Where(x => (x.Status == EKnowledgeStatus.Drafts && x.CreatorId == _sessionContext.UserId) || (x.Status != EKnowledgeStatus.Drafts))
|
|
|
+ //.Where(x => (x.Status == EKnowledgeStatus.Drafts && x.CreatorId == _sessionContext.UserId) || (x.Status != EKnowledgeStatus.Drafts))
|
|
|
.WhereIF(!string.IsNullOrEmpty(pagedDto.Title), x => x.Title.Contains(pagedDto.Title!))
|
|
|
.WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), x => x.Title.Contains(pagedDto.Keyword!) || x.CreatorName.Contains(pagedDto.Keyword!) || x.CreatorOrgName.Contains(pagedDto.Keyword!) || x.SourceOrganize.Name.Contains(pagedDto.Keyword!))
|
|
|
- .WhereIF(pagedDto.Status.HasValue && pagedDto.Status != EKnowledgeStatus.OffShelf && pagedDto.Status != EKnowledgeStatus.NewDrafts && pagedDto.Status != EKnowledgeStatus.All,
|
|
|
- x => x.Status == pagedDto.Status && ((x.ExpiredTime != null && x.ExpiredTime > DateTime.Now) || x.ExpiredTime == null))
|
|
|
- .WhereIF(pagedDto.Status.HasValue && pagedDto.Status == EKnowledgeStatus.OffShelf ,
|
|
|
- x => x.Status == pagedDto.Status || (x.ExpiredTime != null && x.ExpiredTime < DateTime.Now && x.Status != EKnowledgeStatus.Drafts))
|
|
|
+ //.WhereIF(pagedDto.Status.HasValue && pagedDto.Status != EKnowledgeStatus.OffShelf && pagedDto.Status != EKnowledgeStatus.NewDrafts && pagedDto.Status != EKnowledgeStatus.All,
|
|
|
+ // x => x.Status == pagedDto.Status && ((x.ExpiredTime != null && x.ExpiredTime > DateTime.Now) || x.ExpiredTime == null))
|
|
|
+ //.WhereIF(pagedDto.Status.HasValue && pagedDto.Status == EKnowledgeStatus.OffShelf,
|
|
|
+ // x => x.Status == pagedDto.Status || (x.ExpiredTime != null && x.ExpiredTime < DateTime.Now && x.Status != EKnowledgeStatus.Drafts))
|
|
|
.WhereIF(pagedDto.IsPublic.HasValue, x => x.IsPublic == pagedDto.IsPublic)
|
|
|
.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.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)
|
|
|
- .WhereIF(pagedDto.NewDraftsStatus is EKnowledgeStatus.Revert, x => x.Status == EKnowledgeStatus.Revert)
|
|
|
+ //.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)
|
|
|
+ //.WhereIF(pagedDto.NewDraftsStatus is EKnowledgeStatus.Revert, x => x.Status == EKnowledgeStatus.Revert)
|
|
|
|
|
|
- .WhereIF(pagedDto.CreationStartTime.HasValue,x=>x.CreationTime>= pagedDto.CreationStartTime)
|
|
|
+ .WhereIF(pagedDto.CreationStartTime.HasValue, x => x.CreationTime >= pagedDto.CreationStartTime)
|
|
|
.WhereIF(pagedDto.CreationEndTime.HasValue, x => x.CreationTime <= pagedDto.CreationEndTime)
|
|
|
|
|
|
.WhereIF(pagedDto.StartOnShelfTime.HasValue, x => x.OnShelfTime >= pagedDto.StartOnShelfTime)
|
|
@@ -129,8 +183,8 @@ namespace Hotline.Application.Knowledge
|
|
|
|
|
|
.WhereIF(pagedDto.StartUpdateTime.HasValue, x => x.LastModificationTime >= pagedDto.StartUpdateTime)
|
|
|
.WhereIF(pagedDto.EndUpdateTime.HasValue, x => x.LastModificationTime <= pagedDto.EndUpdateTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(pagedDto.Attribution),x=>x.Attribution == pagedDto.Attribution)
|
|
|
- .OrderByDescending(d => d.CreationTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(pagedDto.Attribution), x => x.Attribution == pagedDto.Attribution)
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
.ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
|
|
|
//返回数据
|
|
|
return (total, _mapper.Map<IList<KnowledgeDataDto>>(temp));
|
|
@@ -242,7 +296,7 @@ namespace Hotline.Application.Knowledge
|
|
|
{
|
|
|
var keywords = new List<KnowledgeWordOutDto>();
|
|
|
var splitWords = new Segment().DoSegment(title);
|
|
|
- for (int i = 0;i < splitWords.Count;i++)
|
|
|
+ for (int i = 0; i < splitWords.Count; i++)
|
|
|
{
|
|
|
var word = splitWords.ElementAt(i);
|
|
|
if (word is not { WordType: WordType.SimplifiedChinese, Word.Length: > 1 }) continue;
|
|
@@ -271,14 +325,14 @@ namespace Hotline.Application.Knowledge
|
|
|
|
|
|
public async Task<(int, IList<PageViewOutDto>)> GetPageViewListAsync(PageViewInDto dto, CancellationToken requestAborted = default)
|
|
|
{
|
|
|
- var typeSpliceName = string.Empty;
|
|
|
- if (!string.IsNullOrEmpty(dto.KnowledgeTypeId))
|
|
|
- {
|
|
|
- var type = await _knowledgeTypeRepository.GetAsync(x => x.Id == dto.KnowledgeTypeId);
|
|
|
- typeSpliceName = type?.SpliceName;
|
|
|
- }
|
|
|
-
|
|
|
- var query = _knowledgePvepository.Queryable(includeDeleted: true)
|
|
|
+ var typeSpliceName = string.Empty;
|
|
|
+ if (!string.IsNullOrEmpty(dto.KnowledgeTypeId))
|
|
|
+ {
|
|
|
+ var type = await _knowledgeTypeRepository.GetAsync(x => x.Id == dto.KnowledgeTypeId);
|
|
|
+ typeSpliceName = type?.SpliceName;
|
|
|
+ }
|
|
|
+
|
|
|
+ var query = _knowledgePvepository.Queryable(includeDeleted: true)
|
|
|
.LeftJoin<KnowledgeBase.Knowledge>((p, k) => p.KnowledgeCode == k.Code)
|
|
|
.LeftJoin<KnowledgeRelationType>((p, k, r) => r.KnowledgeId == k.Id)
|
|
|
.WhereIF(dto.Title.NotNullOrEmpty(), (p, k, r) => k.Title.Contains(dto.Title))
|
|
@@ -347,7 +401,7 @@ namespace Hotline.Application.Knowledge
|
|
|
|
|
|
if (!_sessionContext.OrgIsCenter)
|
|
|
{
|
|
|
- dto.Attribution = "部门知识库";
|
|
|
+ dto.Attribution = "部门知识库";
|
|
|
}
|
|
|
|
|
|
var sugar = _knowledgeRepository
|
|
@@ -390,13 +444,13 @@ namespace Hotline.Application.Knowledge
|
|
|
{
|
|
|
var keywords = dto.Content!.GetSegment();
|
|
|
var exp = Expressionable.Create<KnowledgeBase.Knowledge>();
|
|
|
- _knowledgeWordRepository.Queryable()
|
|
|
- .Where(m => keywords.Contains(m.Tag) && m.IsEnable == 0)
|
|
|
- .Select(m => m.Id)
|
|
|
- .ToList()
|
|
|
- .ForEach(m =>
|
|
|
- exp.Or(x => SqlFunc.JsonArrayAny(x.Keywords, m))
|
|
|
- );
|
|
|
+ _knowledgeWordRepository.Queryable()
|
|
|
+ .Where(m => keywords.Contains(m.Tag) && m.IsEnable == 0)
|
|
|
+ .Select(m => m.Id)
|
|
|
+ .ToList()
|
|
|
+ .ForEach(m =>
|
|
|
+ exp.Or(x => SqlFunc.JsonArrayAny(x.Keywords, m))
|
|
|
+ );
|
|
|
sugar = sugar.Where(exp.ToExpression());
|
|
|
}
|
|
|
|