|
@@ -1,5 +1,11 @@
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
+using Hotline.Share.Enums.KnowledgeBase;
|
|
|
+using MapsterMapper;
|
|
|
+using Microsoft.AspNetCore.Http;
|
|
|
+using Microsoft.AspNetCore.Mvc;
|
|
|
+using System.Security.Permissions;
|
|
|
using XF.Domain.Dependency;
|
|
|
+using XF.Domain.Exceptions;
|
|
|
|
|
|
namespace Hotline.KnowledgeBase
|
|
|
{
|
|
@@ -9,14 +15,19 @@ namespace Hotline.KnowledgeBase
|
|
|
///
|
|
|
/// </summary>
|
|
|
private readonly IKnowledgeTypeRepository _knowledgeTypeRepository;
|
|
|
+ private readonly IKnowledgeRepository _knowledgeRepository;
|
|
|
+ private readonly IMapper _mapper;
|
|
|
|
|
|
/// <summary>
|
|
|
///
|
|
|
/// </summary>
|
|
|
/// <param name="knowledgeTypeRepository"></param>
|
|
|
- public KnowledgeTypeService(IKnowledgeTypeRepository knowledgeTypeRepository)
|
|
|
+ /// <param name="mapper"></param>
|
|
|
+ public KnowledgeTypeService(IKnowledgeTypeRepository knowledgeTypeRepository, IMapper mapper, IKnowledgeRepository knowledgeRepository)
|
|
|
{
|
|
|
_knowledgeTypeRepository = knowledgeTypeRepository;
|
|
|
+ _mapper = mapper;
|
|
|
+ _knowledgeRepository = knowledgeRepository;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 查询所有子级
|
|
@@ -49,78 +60,204 @@ namespace Hotline.KnowledgeBase
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 获取全称
|
|
|
+ /// 查询父级节点
|
|
|
/// </summary>
|
|
|
/// <param name="Id"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> GetFullName(string Id)
|
|
|
+ private async Task<List<string>> GetParentNode(string Id)
|
|
|
{
|
|
|
- //获取全部父级名称
|
|
|
- var list = await GetParentNode(Id);
|
|
|
- //倒叙
|
|
|
- list.Reverse();
|
|
|
- //拆分
|
|
|
- return string.Join("-", list.ToArray());
|
|
|
+ List<string> list = new();
|
|
|
+ var type = await _knowledgeTypeRepository.GetAsync(p => p.Id == Id);
|
|
|
+ if (type != null)
|
|
|
+ {
|
|
|
+ list.Add(type.Name);
|
|
|
+ list.AddRange(await GetParentNode(type.ParentId));
|
|
|
+ }
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 修改子级分类全称
|
|
|
+ /// 查询子级节点
|
|
|
/// </summary>
|
|
|
/// <param name="Id"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task UpdateChildNode(string Id)
|
|
|
+ private async Task<List<KnowledgeType>> GetChildNode(string Id)
|
|
|
{
|
|
|
- //查询子分类
|
|
|
- var list = await GetChildNode(Id);
|
|
|
- if (list is not null && list.Count > 0)
|
|
|
+ List<KnowledgeType> list = new();
|
|
|
+ var typelist = await _knowledgeTypeRepository.QueryAsync(p => p.ParentId == Id);
|
|
|
+ if (typelist != null)
|
|
|
{
|
|
|
- foreach (var item in list)
|
|
|
+ foreach (var item in typelist)
|
|
|
{
|
|
|
- //获取全称
|
|
|
- string FullName = await GetFullName(item.ParentId);
|
|
|
- item.SpliceName = string.IsNullOrEmpty(FullName) ? item.Name : FullName + "-" + item.Name;
|
|
|
- //修改全称
|
|
|
- await _knowledgeTypeRepository.UpdateAsync(item);
|
|
|
+ list.Add(item);
|
|
|
+ list.AddRange(await GetChildNode(item.Id));
|
|
|
}
|
|
|
}
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 查询父级节点
|
|
|
+ ///知识分类- 新增
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> TypeAdd(AddKnowledgeTypeDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var type = _mapper.Map<KnowledgeType>(dto);
|
|
|
+ type.IsEnable = true;
|
|
|
+ string FullName = await GetFullName(type.ParentId);
|
|
|
+ type.SpliceName = string.IsNullOrEmpty(FullName) ? dto.Name : FullName + "-" + dto.Name;
|
|
|
+ return await _knowledgeTypeRepository.AddAsync(type, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ ///知识分类- 编辑
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task TypeUpdate(UpdateKnowledgeTypeDto dto, KnowledgeType type, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ bool result = false;
|
|
|
+ //是否更改分类名称
|
|
|
+ if (type.Name != dto.Name)
|
|
|
+ result = true;
|
|
|
+ //转换
|
|
|
+ _mapper.Map(dto, type);
|
|
|
+ //如果更改了名称,则修改全称,未更改不修改
|
|
|
+ if (result)
|
|
|
+ {
|
|
|
+ string FullName = await GetFullName(type.ParentId);
|
|
|
+ type.SpliceName = string.IsNullOrEmpty(FullName) ? dto.Name : FullName + "-" + dto.Name;
|
|
|
+ }
|
|
|
+ //修改数据
|
|
|
+ await _knowledgeTypeRepository.UpdateAsync(type, cancellationToken);
|
|
|
+ //如果修改了名称,对应修改子分类全称
|
|
|
+ if (result)
|
|
|
+ await UpdateChildNode(type.Id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 知识分类-新增、编辑初始化
|
|
|
/// </summary>
|
|
|
/// <param name="Id"></param>
|
|
|
+ /// <param name="ParentId"></param>
|
|
|
/// <returns></returns>
|
|
|
- private async Task<List<string>> GetParentNode(string Id)
|
|
|
+ public async Task<KnowledgeTypeDto> TypeInit(string Id, string ParentId, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- List<string> list = new();
|
|
|
- var type = await _knowledgeTypeRepository.GetAsync(p => p.Id == Id);
|
|
|
- if (type != null)
|
|
|
+ KnowledgeTypeDto knowledgeTypeDto = new();
|
|
|
+ if (!string.IsNullOrEmpty(Id))
|
|
|
{
|
|
|
- list.Add(type.Name);
|
|
|
- list.AddRange(await GetParentNode(type.ParentId));
|
|
|
+ var type = await _knowledgeTypeRepository.GetAsync(p => p.Id == Id, cancellationToken);
|
|
|
+ _mapper.Map(type, knowledgeTypeDto);
|
|
|
}
|
|
|
- return list;
|
|
|
+ var list = await _knowledgeTypeRepository.QueryAsync(p => p.IsEnable == true);
|
|
|
+ if (!string.IsNullOrEmpty(ParentId) && ParentId != Guid.Empty.ToString())
|
|
|
+ {
|
|
|
+ knowledgeTypeDto.TreeLists = GetChildren(list, Guid.Empty.ToString(), ParentId);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ knowledgeTypeDto.TreeLists = GetChildren(list, Guid.Empty.ToString(), "");
|
|
|
+ }
|
|
|
+ return knowledgeTypeDto;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 查询子级节点
|
|
|
+ /// 知识分类-启用、禁用切换
|
|
|
/// </summary>
|
|
|
/// <param name="Id"></param>
|
|
|
/// <returns></returns>
|
|
|
- private async Task<List<KnowledgeType>> GetChildNode(string Id)
|
|
|
+ public async Task TypeChangeState(string Id, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- List<KnowledgeType> list = new();
|
|
|
- var typelist = await _knowledgeTypeRepository.QueryAsync(p => p.ParentId == Id);
|
|
|
- if (typelist != null)
|
|
|
+ //查询子级数据
|
|
|
+ var getChild = await _knowledgeTypeRepository.GetChild(Id);
|
|
|
+ //禁用子级数据
|
|
|
+ if (getChild != null && getChild.Count > 0)
|
|
|
{
|
|
|
- foreach (var item in typelist)
|
|
|
+ foreach (var item in getChild)
|
|
|
{
|
|
|
- list.Add(item);
|
|
|
- list.AddRange(await GetChildNode(item.Id));
|
|
|
+ item.IsEnable = false;
|
|
|
+ await _knowledgeTypeRepository.UpdateAsync(item, cancellationToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ////查询是否有子级,如果有子级启用,则不能禁用
|
|
|
+ //var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id && p.IsEnable == true);
|
|
|
+ //if (checkChild > 0)
|
|
|
+ // throw UserFriendlyException.SameMessage("请先禁用子级分类!");
|
|
|
+ //type.IsEnable = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 知识分类-禁用,并且下架知识
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="Id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task TypeChangeStateAndOffShelf(string Id, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ //查询子级数据
|
|
|
+ var getChild = await _knowledgeTypeRepository.GetChild(Id);
|
|
|
+ //禁用子级数据
|
|
|
+ if (getChild != null && getChild.Count > 0)
|
|
|
+ {
|
|
|
+ foreach (var item in getChild)
|
|
|
+ {
|
|
|
+ item.IsEnable = false;
|
|
|
+ await _knowledgeTypeRepository.UpdateAsync(item, cancellationToken);
|
|
|
+ //下架知识
|
|
|
+ //查询当前分类下的知识(查询条件:此分类下/状态为成功/未删除/已上架)
|
|
|
+ var knowList = _knowledgeRepository.Queryable().Where(p => p.KnowledgeTypeId == item.Id && p.Status == EKnowledgeStatus.Succeed && p.IsDeleted == false && p.IsOnShelf == true).ToList();
|
|
|
+ if (knowList != null && knowList.Count > 0)
|
|
|
+ {
|
|
|
+ //修改知识为下架状态
|
|
|
+ foreach (var itemKnow in knowList)
|
|
|
+ {
|
|
|
+ itemKnow.IsOnShelf = false;
|
|
|
+ itemKnow.OffShelfTime = DateTime.Now;
|
|
|
+ await _knowledgeRepository.UpdateAsync(itemKnow, cancellationToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #region 私有方法
|
|
|
+ /// <summary>
|
|
|
+ /// 获取全称
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="Id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task<string> GetFullName(string Id)
|
|
|
+ {
|
|
|
+ //获取全部父级名称
|
|
|
+ var list = await GetParentNode(Id);
|
|
|
+ //倒叙
|
|
|
+ list.Reverse();
|
|
|
+ //拆分
|
|
|
+ return string.Join("-", list.ToArray());
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改子级分类全称
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="Id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task UpdateChildNode(string Id)
|
|
|
+ {
|
|
|
+ //查询子分类
|
|
|
+ var list = await GetChildNode(Id);
|
|
|
+ if (list is not null && list.Count > 0)
|
|
|
+ {
|
|
|
+ foreach (var item in list)
|
|
|
+ {
|
|
|
+ //获取全称
|
|
|
+ string FullName = await GetFullName(item.ParentId);
|
|
|
+ item.SpliceName = string.IsNullOrEmpty(FullName) ? item.Name : FullName + "-" + item.Name;
|
|
|
+ //修改全称
|
|
|
+ await _knowledgeTypeRepository.UpdateAsync(item);
|
|
|
}
|
|
|
}
|
|
|
- return list;
|
|
|
}
|
|
|
+ #endregion
|
|
|
|
|
|
}
|
|
|
}
|