|
@@ -1,19 +1,19 @@
|
|
|
-using DocumentFormat.OpenXml.Office2010.Excel;
|
|
|
-using Hotline.Application.Knowledge;
|
|
|
-using Hotline.KnowledgeBase;
|
|
|
-using Hotline.Planlibrary;
|
|
|
-using Hotline.Repository.SqlSugar.Knowledge;
|
|
|
+using Hotline.Planlibrary;
|
|
|
using Hotline.Settings.Hotspots;
|
|
|
-using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.Knowledge;
|
|
|
using Hotline.Share.Dtos.Planlibrary;
|
|
|
-using Hotline.Share.Enums.KnowledgeBase;
|
|
|
using Hotline.Share.Enums.Planlibrary;
|
|
|
using MapsterMapper;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
+using Hotline.Repository.SqlSugar.Extensions;
|
|
|
+using Hotline.SeedData;
|
|
|
+using Hotline.File;
|
|
|
+using Hotline.Application.Bulletin;
|
|
|
+using Hotline.Share.Tools;
|
|
|
+using Hotline.Application.Tools;
|
|
|
|
|
|
namespace Hotline.Application.Planlibrary
|
|
|
{
|
|
@@ -22,6 +22,7 @@ namespace Hotline.Application.Planlibrary
|
|
|
/// </summary>
|
|
|
public class PlanApplication : IPlanApplication, IScopeDependency
|
|
|
{
|
|
|
+
|
|
|
#region 注册
|
|
|
|
|
|
private readonly IRepository<PlanList> _planListRepository; //预案库列表
|
|
@@ -31,15 +32,19 @@ namespace Hotline.Application.Planlibrary
|
|
|
private readonly ISessionContext _sessionContext;
|
|
|
private readonly IMapper _mapper;
|
|
|
private readonly IRepository<Hotspot> _hotspotTypeRepository;
|
|
|
+ private readonly IFileRepository _fileRepository;
|
|
|
+ private readonly IBulletinApplication _bulletinApplication;
|
|
|
|
|
|
public PlanApplication(
|
|
|
IRepository<PlanList> planListRepository,
|
|
|
IRepository<PlanRelationType> planRelationTypeRepository,
|
|
|
IRepository<PlanType> planTypeRepository,
|
|
|
- IRepository<PlanTypeOrg> planTypeOrgRepository,
|
|
|
+ IRepository<PlanTypeOrg> planTypeOrgRepository,
|
|
|
ISessionContext sessionContext,
|
|
|
IMapper mapper,
|
|
|
- IRepository<Hotspot> hotspotTypeRepository)
|
|
|
+ IRepository<Hotspot> hotspotTypeRepository,
|
|
|
+ IFileRepository fileRepository,
|
|
|
+ IBulletinApplication bulletinApplication)
|
|
|
{
|
|
|
_planListRepository = planListRepository;
|
|
|
_planRelationTypeRepository = planRelationTypeRepository;
|
|
@@ -48,6 +53,8 @@ namespace Hotline.Application.Planlibrary
|
|
|
_sessionContext = sessionContext;
|
|
|
_mapper = mapper;
|
|
|
_hotspotTypeRepository = hotspotTypeRepository;
|
|
|
+ _fileRepository = fileRepository;
|
|
|
+ _bulletinApplication = bulletinApplication;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
@@ -62,7 +69,7 @@ namespace Hotline.Application.Planlibrary
|
|
|
/// <param name="dto"></param>
|
|
|
/// <param name="cancellationToken"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> AddType(AddPlanTypeDto dto, CancellationToken cancellationToken)
|
|
|
+ public async Task<string> AddTypeAsync(AddPlanTypeDto dto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var sandard = await _planTypeRepository.GetAsync(p => p.ParentId == dto.ParentId && p.Name == dto.Name && p.IsDeleted == false, cancellationToken);
|
|
|
if (sandard is not null)
|
|
@@ -89,7 +96,7 @@ namespace Hotline.Application.Planlibrary
|
|
|
/// <param name="dto"></param>
|
|
|
/// <param name="cancellationToken"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task UpdateType(UpdatePlanTypeDto dto, CancellationToken cancellationToken)
|
|
|
+ public async Task UpdateTypeAsync(UpdatePlanTypeDto dto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//查询原有数据
|
|
|
var type = await _planTypeRepository.GetAsync(dto.Id, cancellationToken);
|
|
@@ -134,7 +141,7 @@ namespace Hotline.Application.Planlibrary
|
|
|
/// <param name="Id"></param>
|
|
|
/// <param name="cancellationToken"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task RemoveType(string Id, CancellationToken cancellationToken)
|
|
|
+ public async Task RemoveTypeAsync(string Id, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//查询数据是否存在
|
|
|
var sandard = await _planTypeRepository.GetAsync(p => p.Id == Id && p.IsDeleted == false, cancellationToken);
|
|
@@ -161,75 +168,241 @@ namespace Hotline.Application.Planlibrary
|
|
|
|
|
|
#region 预案库管理
|
|
|
|
|
|
+ #region 预案库 - 列表
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 预案库 - 列表
|
|
|
/// </summary>
|
|
|
/// <param name="pagedDto"></param>
|
|
|
/// <returns></returns>
|
|
|
- //public async Task<(int, IList<KnowledgeDataDto>)> GetKnowList(KnowPagedListDto pagedDto, CancellationToken cancellationToken)
|
|
|
- //{
|
|
|
- // if (!_sessionContext.OrgIsCenter)
|
|
|
- // {
|
|
|
- // pagedDto.Attribution = "部门知识库";
|
|
|
- // }
|
|
|
- // var typeSpliceName = string.Empty;
|
|
|
- // var hotspotHotSpotFullName = string.Empty;
|
|
|
- // if (!string.IsNullOrEmpty(pagedDto.KnowledgeTypeId))
|
|
|
- // {
|
|
|
- // var type = await _planTypeRepository.GetAsync(x => x.Id == pagedDto.KnowledgeTypeId);
|
|
|
- // typeSpliceName = type?.SpliceName;
|
|
|
- // }
|
|
|
- // if (!string.IsNullOrEmpty(pagedDto.HotspotId))
|
|
|
- // {
|
|
|
- // var hotspot = await _hotspotTypeRepository.GetAsync(x => x.Id == pagedDto.HotspotId);
|
|
|
- // hotspotHotSpotFullName = hotspot?.HotSpotFullName;
|
|
|
- // }
|
|
|
- // var (total, temp) = await _knowledgeRepository.Queryable(false, false, false)
|
|
|
- // .Includes(x => x.User)
|
|
|
- // .Includes(x => x.SystemOrganize)
|
|
|
- // .Includes(x => x.SourceOrganize)
|
|
|
- // .Includes(x => x.HotspotType)
|
|
|
- // .Includes(x => x.Workflow)
|
|
|
- // .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))
|
|
|
- // .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.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.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)
|
|
|
- // .WhereIF(pagedDto.EndOnShelfTime.HasValue, x => x.OnShelfTime <= pagedDto.EndOnShelfTime)
|
|
|
-
|
|
|
- // .WhereIF(pagedDto.StartOffShelfTime.HasValue, x => x.OffShelfTime >= pagedDto.StartOffShelfTime)
|
|
|
- // .WhereIF(pagedDto.EndOffShelfTime.HasValue, x => x.OffShelfTime <= pagedDto.EndOffShelfTime)
|
|
|
-
|
|
|
- // .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)
|
|
|
- // .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
|
|
|
- // //返回数据
|
|
|
- // return (total, _mapper.Map<IList<KnowledgeDataDto>>(temp));
|
|
|
- //}
|
|
|
+ public async Task<(int, IList<PlanDataDto>)> QueryAllPlanListAsync(PlanListDto pagedDto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (!_sessionContext.OrgIsCenter)
|
|
|
+ {// 部门只能查询【部门预案库】
|
|
|
+ pagedDto.Attribution = "部门预案库";
|
|
|
+ }
|
|
|
+
|
|
|
+ var typeSpliceName = string.Empty;
|
|
|
+ var hotspotHotSpotFullName = string.Empty;
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(pagedDto.PlanTypeID))
|
|
|
+ {
|
|
|
+ var type = await _planTypeRepository.GetAsync(x => x.Id == pagedDto.PlanTypeID);
|
|
|
+ typeSpliceName = type?.SpliceName;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(pagedDto.HotspotId))
|
|
|
+ {
|
|
|
+ var hotspot = await _hotspotTypeRepository.GetAsync(x => x.Id == pagedDto.HotspotId);
|
|
|
+ hotspotHotSpotFullName = hotspot?.HotSpotFullName;
|
|
|
+ }
|
|
|
+
|
|
|
+ //单表分页
|
|
|
+ var (total, temp) = await _planListRepository.Queryable()
|
|
|
+ //.Includes(x => x.PlanTypes)
|
|
|
+
|
|
|
+ .Where(x => x.IsDeleted == false)
|
|
|
+ .Where(x => (x.Status == EPlanStatus.Drafts && x.CreatorId == _sessionContext.UserId) || (x.Status != EPlanStatus.Drafts))
|
|
|
+ .WhereIF(OrgSeedData.CenterId != pagedDto.CreateOrgId && !string.IsNullOrEmpty(pagedDto.CreateOrgId), x => x.CreatorOrgId != null && x.CreatorOrgId.StartsWith(pagedDto.CreateOrgId!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(pagedDto.Attribution), x => x.Attribution == pagedDto.Attribution)
|
|
|
+ .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!))
|
|
|
+ .WhereIF(pagedDto.Status.HasValue && pagedDto.Status != EPlanStatus.OffShelf &&
|
|
|
+ pagedDto.Status != EPlanStatus.NewDrafts &&
|
|
|
+ pagedDto.Status != EPlanStatus.All,
|
|
|
+ x => x.Status == pagedDto.Status && ((x.ExpiredTime != null && x.ExpiredTime > DateTime.Now) || x.ExpiredTime == null))
|
|
|
+ .WhereIF(pagedDto.Status.HasValue && pagedDto.Status == EPlanStatus.OffShelf, x => x.Status == pagedDto.Status || (x.ExpiredTime != null && x.ExpiredTime < DateTime.Now && x.Status != EPlanStatus.Drafts))
|
|
|
+ .WhereIF(pagedDto.Status.HasValue && pagedDto.Status == EPlanStatus.NewDrafts, x => x.Status == EPlanStatus.Drafts || x.Status == EPlanStatus.Revert)
|
|
|
+ .WhereIF(pagedDto.IsPublic.HasValue, x => x.IsPublic == pagedDto.IsPublic)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.PlanTypes.Any(t => t.PlanTypeSpliceName.StartsWith(typeSpliceName)))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(hotspotHotSpotFullName), x => x.HotspotType.HotSpotFullName.EndsWith(hotspotHotSpotFullName!))
|
|
|
+
|
|
|
+ .WhereIF(pagedDto.CreationTimeStart.HasValue, x => x.CreationTime >= pagedDto.CreationTimeStart)
|
|
|
+ .WhereIF(pagedDto.CreationTimeEnd.HasValue, x => x.CreationTime <= pagedDto.CreationTimeEnd)
|
|
|
+
|
|
|
+ .WhereIF(pagedDto.OnShelfTimeStart.HasValue, x => x.OnShelfTime >= pagedDto.OnShelfTimeStart)
|
|
|
+ .WhereIF(pagedDto.OnShelfTimeEnd.HasValue, x => x.OnShelfTime <= pagedDto.OnShelfTimeEnd)
|
|
|
+
|
|
|
+ .WhereIF(pagedDto.OffShelfTimeStart.HasValue, x => x.OffShelfTime >= pagedDto.OffShelfTimeStart)
|
|
|
+ .WhereIF(pagedDto.OffShelfTimeEnd.HasValue, x => x.OffShelfTime <= pagedDto.OffShelfTimeEnd)
|
|
|
+
|
|
|
+ .WhereIF(pagedDto.UpdateTimeStart.HasValue, x => x.UpdateTime >= pagedDto.UpdateTimeStart)
|
|
|
+ .WhereIF(pagedDto.UpdateTimeEnd.HasValue, x => x.UpdateTime <= pagedDto.UpdateTimeEnd)
|
|
|
+
|
|
|
+ .WhereIF(pagedDto.ExaminTimeStart.HasValue, x => x.ExaminTime >= pagedDto.ExaminTimeStart)
|
|
|
+ .WhereIF(pagedDto.ExaminTimeEnd.HasValue, x => x.ExaminTime <= pagedDto.ExaminTimeEnd)
|
|
|
+
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
+ .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
|
|
|
+
|
|
|
+ return (total, _mapper.Map<IList<PlanDataDto>>(temp));
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 预案库 - 新增
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 新增
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> AddPlanAsync(AddPlanListDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var pList = _mapper.Map<PlanList>(dto);
|
|
|
+
|
|
|
+ var any = await _planListRepository.Queryable().Where(x => x.Status == EPlanStatus.OnShelf && x.Title == dto.Title).AnyAsync();
|
|
|
+ if (any)
|
|
|
+ throw UserFriendlyException.SameMessage("当前知识标题存在重复标题!");
|
|
|
+
|
|
|
+ if (dto.Files != null)
|
|
|
+ pList.FileJson = await _fileRepository.AddFileAsync(dto.Files, pList.Id, "", cancellationToken);
|
|
|
+ await _planListRepository.AddAsync(pList, cancellationToken);
|
|
|
+
|
|
|
+ if (dto.PlanType.Any())
|
|
|
+ {
|
|
|
+ List<PlanRelationType> types = _mapper.Map<List<PlanRelationType>>(dto.PlanType);
|
|
|
+ types.ForEach(x => x.PlanId = pList.Id);
|
|
|
+ await _planRelationTypeRepository.AddRangeAsync(types, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ return pList.Id;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 预案库 - 修改
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task UpdatePlanAsync(UpdatePlanListDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var plan = await _planListRepository.GetAsync(dto.Id);
|
|
|
+ if (plan == null)
|
|
|
+ throw UserFriendlyException.SameMessage("预案库查询失败");
|
|
|
+
|
|
|
+ if ((plan.Status == EPlanStatus.OnShelf || plan.Status == EPlanStatus.Auditing) && (plan.ExpiredTime.HasValue && plan.ExpiredTime.Value > DateTime.Now))
|
|
|
+ throw UserFriendlyException.SameMessage("预案库数据不可修改");
|
|
|
+
|
|
|
+ var any = await _planListRepository.Queryable().Where(x => x.Status == EPlanStatus.OnShelf && x.Title == dto.Title && x.Id != dto.Id).AnyAsync();
|
|
|
+ if (any)
|
|
|
+ throw UserFriendlyException.SameMessage("当前知识标题存在重复标题!");
|
|
|
+
|
|
|
+ _mapper.Map(dto, plan);
|
|
|
+
|
|
|
+ plan.HotspotId = dto.HotspotId;
|
|
|
+
|
|
|
+ if (dto.Files.Any())
|
|
|
+ plan.FileJson = await _fileRepository.AddFileAsync(dto.Files, plan.Id, "", cancellationToken);
|
|
|
+ else
|
|
|
+ plan.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+
|
|
|
+ await _planListRepository.UpdateNullAsync(plan, cancellationToken);
|
|
|
+ if (dto.PlanType.Any())
|
|
|
+ {
|
|
|
+ var anyRelationTypes = await _planRelationTypeRepository.Queryable().Where(x => x.PlanId == plan.Id).ToListAsync();
|
|
|
+ if (anyRelationTypes.Any())
|
|
|
+ await _planRelationTypeRepository.RemoveRangeAsync(anyRelationTypes);
|
|
|
+ List<PlanRelationType> types = _mapper.Map<List<PlanRelationType>>(dto.PlanType);
|
|
|
+ types.ForEach(x => x.PlanId = dto.Id);
|
|
|
+ await _planRelationTypeRepository.AddRangeAsync(types, cancellationToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 预案库 - 详情
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 详情
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="Id"></param>
|
|
|
+ /// <param name="IsAddPv">默认不增加,false不增加,true增加浏览量</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<PlanInfoDto> GetPlanAsync(string Id, bool? IsAddPv, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var plan = await _planListRepository.GetAsync(Id);
|
|
|
+ if (plan == null)
|
|
|
+ throw UserFriendlyException.SameMessage("预案库查询失败");
|
|
|
+ ;
|
|
|
+ //转化
|
|
|
+ var planInfoDto = _mapper.Map<PlanInfoDto>(plan);
|
|
|
+
|
|
|
+ if (plan != null && !string.IsNullOrEmpty(plan.Content))
|
|
|
+ planInfoDto.Content = _bulletinApplication.GetSiteUrls(plan.Content);
|
|
|
+
|
|
|
+ // 热点
|
|
|
+ //var hot = await _hotspotTypeRepository.GetAsync(plan.HotspotId, cancellationToken);
|
|
|
+ //if (hot != null)
|
|
|
+ // planDto.HotspotId = hot.HotSpotFullName;
|
|
|
+
|
|
|
+ // 收藏
|
|
|
+ //var collect = await _knowledgeCollectRepository.GetAsync(x => x.KnowledgeId == Id && x.CreatorId == _sessionContext.UserId);
|
|
|
+ //if (collect != null)
|
|
|
+ // knowledgeShowInfoDto.Collect = _mapper.Map<KnowledgeCollectDto>(collect);
|
|
|
+
|
|
|
+ if (planInfoDto.FileJson != null && planInfoDto.FileJson.Any())
|
|
|
+ {
|
|
|
+ var ids = planInfoDto.FileJson.Select(x => x.Id).ToList();
|
|
|
+ planInfoDto.Files = await _fileRepository.GetFilesAsync(ids, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新浏览量
|
|
|
+ //if (IsAddPv == true)
|
|
|
+ // _mediator.Publish(new GetKnowledgeInfoNotify(knowledge));
|
|
|
+ return planInfoDto;
|
|
|
+ }
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
+ #region 预案库 - 批量导出
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 预案库 - 批量导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<Dictionary<string, Stream>> PlanInfoListExportAsync(PlanInfoExportDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var streamList = new Dictionary<string, Stream>();
|
|
|
+ var knowList = await _planListRepository.Queryable()
|
|
|
+ .Where(m => dto.Ids.Contains(m.Id))
|
|
|
+ .Select(m => new { m.Title, m.Content })
|
|
|
+ .ToListAsync(cancellationToken);
|
|
|
+
|
|
|
+ var tasks = knowList.Select(async item =>
|
|
|
+ {
|
|
|
+ var stream = await Task.Run(() => item.Content.HtmlToStream(dto.FileType), cancellationToken);
|
|
|
+ return new KeyValuePair<string, Stream>(
|
|
|
+ item.Title + dto.FileType.GetFileExtension(),
|
|
|
+ stream
|
|
|
+ );
|
|
|
+ });
|
|
|
+
|
|
|
+ var results = await Task.WhenAll(tasks);
|
|
|
+
|
|
|
+ foreach (var kvp in results)
|
|
|
+ {
|
|
|
+ if (!streamList.ContainsKey(kvp.Key))
|
|
|
+ {
|
|
|
+ streamList.Add(kvp.Key, kvp.Value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return streamList;
|
|
|
+ }
|
|
|
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #endregion
|
|
|
|
|
|
#region 私有方法
|
|
|
|
|
@@ -357,5 +530,6 @@ namespace Hotline.Application.Planlibrary
|
|
|
#endregion
|
|
|
|
|
|
#endregion
|
|
|
+
|
|
|
}
|
|
|
}
|