瀏覽代碼

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

tangjiang 3 月之前
父節點
當前提交
9271746296

+ 5 - 0
src/Hotline.Api/Controllers/CaseController.cs

@@ -279,6 +279,7 @@ namespace Hotline.Api.Controllers
             dto.Id = Id;
             dto.ApplyStatus = ECaseApplyStatus.Add;
             dto.Status = ECaseStatus.OnShelf;
+            dto.OnShelfTime = DateTime.Now;
             await _caseApplication.AuditCaseAsync(dto, HttpContext.RequestAborted);
         }
 
@@ -294,6 +295,7 @@ namespace Hotline.Api.Controllers
             dto.Id = Id;
             dto.ApplyStatus = ECaseApplyStatus.Offshelf;
             dto.Status = ECaseStatus.Auditing;
+            dto.OffShelfTime = DateTime.Now;
 
             await _caseApplication.AuditCaseAsync(dto, HttpContext.RequestAborted);
         }
@@ -321,15 +323,18 @@ namespace Hotline.Api.Controllers
                 if (CaseDto.ApplyStatus == ECaseApplyStatus.Add)
                 {
                     CaseDto.Status = ECaseStatus.OnShelf;
+                    CaseDto.OnShelfTime = DateTime.Now;
                 }
                 if (CaseDto.ApplyStatus == ECaseApplyStatus.Update)
                 {
                     CaseDto.Status = ECaseStatus.OnShelf;
+                    CaseDto.OnShelfTime = DateTime.Now;
                     CaseDto.UpdateTime = DateTime.Now;
                 }
                 if (CaseDto.ApplyStatus == ECaseApplyStatus.Offshelf)
                 {
                     CaseDto.Status = ECaseStatus.OffShelf;
+                    CaseDto.OffShelfTime = DateTime.Now;
                 }
                 if (CaseDto.ApplyStatus == ECaseApplyStatus.Delete)
                 {

+ 5 - 0
src/Hotline.Api/Controllers/PlanController.cs

@@ -280,6 +280,7 @@ namespace Hotline.Api.Controllers
             dto.Id = Id;
             dto.ApplyStatus = EPlanApplyStatus.Add;
             dto.Status = EPlanStatus.OnShelf;
+            dto.OnShelfTime = DateTime.Now;
             await _planApplication.AuditPlanAsync(dto, HttpContext.RequestAborted);
         }
 
@@ -295,6 +296,7 @@ namespace Hotline.Api.Controllers
             dto.Id = Id;
             dto.ApplyStatus = EPlanApplyStatus.Offshelf;
             dto.Status = EPlanStatus.OffShelf;
+            dto.OffShelfTime = DateTime.Now;
 
             await _planApplication.AuditPlanAsync(dto, HttpContext.RequestAborted);
         }
@@ -322,15 +324,18 @@ namespace Hotline.Api.Controllers
                 if (planDto.ApplyStatus == EPlanApplyStatus.Add)
                 {
                     planDto.Status = EPlanStatus.OnShelf;
+                    planDto.OnShelfTime = DateTime.Now; 
                 }
                 if (planDto.ApplyStatus == EPlanApplyStatus.Update)
                 {
                     planDto.Status = EPlanStatus.OnShelf;
+                    planDto.OnShelfTime = DateTime.Now;
                     planDto.UpdateTime = DateTime.Now;
                 }
                 if (planDto.ApplyStatus == EPlanApplyStatus.Offshelf)
                 {
                     planDto.Status = EPlanStatus.OffShelf;
+                    planDto.OffShelfTime = DateTime.Now;
                 }
                 if (planDto.ApplyStatus == EPlanApplyStatus.Delete)
                 {

+ 41 - 17
src/Hotline.Application/Caselibrary/CaseApplication.cs

@@ -17,6 +17,8 @@ using SqlSugar;
 using Hotline.CaseLibrary;
 using Hotline.Orders;
 using Hotline.KnowledgeBase;
+using Hotline.Share.Enums.Planlibrary;
+using System.Numerics;
 
 namespace Hotline.Application.Caselibrary
 {
@@ -211,6 +213,11 @@ namespace Hotline.Application.Caselibrary
                 .Where(x => (x.Status == ECaseStatus.Drafts && x.CreatorId == _sessionContext.UserId) || (x.Status != ECaseStatus.Drafts))
                 .WhereIF(OrgSeedData.CenterId != pagedDto.CreateOrgId && !string.IsNullOrEmpty(pagedDto.CreateOrgId), x => x.CreatorOrgId != null && x.CreatorOrgId.StartsWith(pagedDto.CreateOrgId!))
                 .WhereIF(!string.IsNullOrEmpty(pagedDto.Title), x => x.Title.Contains(pagedDto.Title))
+                .WhereIF(!string.IsNullOrEmpty(pagedDto.Abstract), x => x.Abstract.Contains(pagedDto.Abstract))
+                .WhereIF(!string.IsNullOrEmpty(pagedDto.Describe), x => x.Describe.Contains(pagedDto.Describe))
+                .WhereIF(!string.IsNullOrEmpty(pagedDto.Result), x => x.Result.Contains(pagedDto.Result))
+                .WhereIF(!string.IsNullOrEmpty(pagedDto.Reason), x => x.Reason.Contains(pagedDto.Reason))
+
                 .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), x => x.Title.Contains(pagedDto.Keyword!) ||
                                                                   x.CreatorName!.Contains(pagedDto.Keyword!) ||
                                                                   x.CreatorOrgName!.Contains(pagedDto.Keyword!))
@@ -219,7 +226,7 @@ namespace Hotline.Application.Caselibrary
                                                      pagedDto.Status != ECaseStatus.All,
                                                         x => x.Status == pagedDto.Status && ((x.ExpiredTime != null && x.ExpiredTime > DateTime.Now) || x.ExpiredTime == null))
                 .WhereIF(pagedDto.Status.HasValue && pagedDto.Status == ECaseStatus.OffShelf, x => x.Status == pagedDto.Status || (x.ExpiredTime != null && x.ExpiredTime < DateTime.Now && x.Status != ECaseStatus.Drafts))
-                .WhereIF(pagedDto.Status.HasValue && pagedDto.Status == ECaseStatus.NewDrafts, x => x.Status == ECaseStatus.Drafts || x.Status == ECaseStatus.Revert)
+                .WhereIF(pagedDto.Status.HasValue && pagedDto.Status == ECaseStatus.NewDrafts, x => x.Status == ECaseStatus.Drafts || x.Status == ECaseStatus.Revert || x.Status == ECaseStatus.NewDrafts)
                 .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.CaseTypes.Any(t => t.CaseTypeSpliceName.StartsWith(typeSpliceName)))
 
                 .WhereIF(pagedDto.CreationTimeStart.HasValue, x => x.CreationTime >= pagedDto.CreationTimeStart)
@@ -237,10 +244,10 @@ namespace Hotline.Application.Caselibrary
                 .WhereIF(pagedDto.ExaminTimeStart.HasValue, x => x.ExaminTime >= pagedDto.ExaminTimeStart)
                 .WhereIF(pagedDto.ExaminTimeEnd.HasValue, x => x.ExaminTime <= pagedDto.ExaminTimeEnd)
 
-                .OrderByIF(string.IsNullOrEmpty(pagedDto.SortField), d => d.CreationTime, OrderByType.Desc)
-                .OrderByIF(pagedDto is { SortField: "PageView" }, d => d.PageView, OrderByType.Desc)         //阅读量
-                .OrderByIF(pagedDto is { SortField: "Score" }, d => d.Score, OrderByType.Desc)               //评分
-                .OrderByIF(pagedDto is { SortField: "CreationTime" }, d => d.CreationTime, OrderByType.Desc) //创建时间
+                .OrderByIF(string.IsNullOrEmpty(pagedDto.SortField), x => x.CreationTime, OrderByType.Desc)
+                .OrderByIF(pagedDto is { SortField: "pageView" }, x => x.PageView, OrderByType.Desc)         //阅读量
+                .OrderByIF(pagedDto is { SortField: "score" }, x => x.Score, OrderByType.Desc)               //评分
+                .OrderByIF(pagedDto is { SortField: "creationTime" }, x => x.CreationTime, OrderByType.Desc) //创建时间
 
                 .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
 
@@ -303,22 +310,36 @@ namespace Hotline.Application.Caselibrary
             if (any)
                 throw UserFriendlyException.SameMessage("当前案例标题存在重复标题!");
 
-            _mapper.Map(dto, Case);
-
-            if (dto.Files != null && dto.Files.Count > 0)
-                Case.FileJson = await _fileRepository.AddFileAsync(dto.Files, Case.Id, "", cancellationToken);
+            if (dto.ApplyStatus == ECaseApplyStatus.Delete)
+            {
+                Case.Status = (ECaseStatus)dto.Status;
+                Case.ApplyStatus = (ECaseApplyStatus)dto.ApplyStatus;
+                Case.Id = dto.Id;
+                Case.ApplyReason = dto.ApplyReason;
+            }
             else
-                Case.FileJson = new List<Share.Dtos.File.FileJson>();
+            {
+                _mapper.Map(dto, Case);
+
+                if (dto.Files != null && dto.Files.Count > 0)
+                    Case.FileJson = await _fileRepository.AddFileAsync(dto.Files, Case.Id, "", cancellationToken);
+                else
+                    Case.FileJson = new List<Share.Dtos.File.FileJson>();
+            }
 
             await _caseListRepository.UpdateNullAsync(Case, cancellationToken);
-            if (dto.CaseTypes.Any())
+
+            if (dto.ApplyStatus != ECaseApplyStatus.Delete)
             {
-                var anyRelationTypes = await _caseRelationTypeRepository.Queryable().Where(x => x.CaseId == Case.Id).ToListAsync();
-                if (anyRelationTypes.Any())
-                    await _caseRelationTypeRepository.RemoveRangeAsync(anyRelationTypes);
-                List<CaseRelationType> types = _mapper.Map<List<CaseRelationType>>(dto.CaseTypes);
-                types.ForEach(x => x.CaseId = dto.Id);
-                await _caseRelationTypeRepository.AddRangeAsync(types, cancellationToken);
+                if (dto.CaseTypes.Any())
+                {
+                    var anyRelationTypes = await _caseRelationTypeRepository.Queryable().Where(x => x.CaseId == Case.Id).ToListAsync();
+                    if (anyRelationTypes.Any())
+                        await _caseRelationTypeRepository.RemoveRangeAsync(anyRelationTypes);
+                    List<CaseRelationType> types = _mapper.Map<List<CaseRelationType>>(dto.CaseTypes);
+                    types.ForEach(x => x.CaseId = dto.Id);
+                    await _caseRelationTypeRepository.AddRangeAsync(types, cancellationToken);
+                }
             }
         }
 
@@ -368,7 +389,10 @@ namespace Hotline.Application.Caselibrary
             Case.ExaminTime = dto.ExaminTime;
             Case.ExaminManId = dto.ExaminManId;
             Case.ExaminOrganizeId = dto.ExaminOrganizeId;
+            Case.ExaminOpinion = dto.ExaminOpinion;
             Case.UpdateTime = dto.UpdateTime;
+            Case.OnShelfTime = dto.OnShelfTime;
+            Case.OffShelfTime = dto.OffShelfTime;
 
             if (Case.ApplyStatus == ECaseApplyStatus.Delete)
             {

+ 36 - 18
src/Hotline.Application/Planlibrary/PlanApplication.cs

@@ -221,6 +221,7 @@ namespace Hotline.Application.Planlibrary
                 .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.Content), x => x.Content.Contains(pagedDto.Content))
                 .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), x => x.Title.Contains(pagedDto.Keyword!) ||
                                                                   x.CreatorName!.Contains(pagedDto.Keyword!) ||
                                                                   x.CreatorOrgName!.Contains(pagedDto.Keyword!))
@@ -229,7 +230,7 @@ namespace Hotline.Application.Planlibrary
                                                      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.Status.HasValue && pagedDto.Status == EPlanStatus.NewDrafts, x => x.Status == EPlanStatus.Drafts || x.Status == EPlanStatus.Revert || x.Status == EPlanStatus.NewDrafts)
                 .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!))
@@ -249,10 +250,10 @@ namespace Hotline.Application.Planlibrary
                 .WhereIF(pagedDto.ExaminTimeStart.HasValue, x => x.ExaminTime >= pagedDto.ExaminTimeStart)
                 .WhereIF(pagedDto.ExaminTimeEnd.HasValue, x => x.ExaminTime <= pagedDto.ExaminTimeEnd)
 
-                .OrderByIF(string.IsNullOrEmpty(pagedDto.SortField), d => d.CreationTime, OrderByType.Desc)
-                .OrderByIF(pagedDto is { SortField: "PageView" }, d => d.PageView, OrderByType.Desc)         //阅读量
-                .OrderByIF(pagedDto is { SortField: "Score" }, d => d.Score, OrderByType.Desc)               //评分
-                .OrderByIF(pagedDto is { SortField: "CreationTime" }, d => d.CreationTime, OrderByType.Desc) //创建时间
+                .OrderByIF(string.IsNullOrEmpty(pagedDto.SortField), x => x.CreationTime, OrderByType.Desc)
+                .OrderByIF(pagedDto is { SortField: "pageView", }, x => x.PageView, OrderByType.Desc)         //阅读量
+                .OrderByIF(pagedDto is { SortField: "score", }, x => x.Score, OrderByType.Desc)               //评分
+                .OrderByIF(pagedDto is { SortField: "creationTime" }, x => x.CreationTime, OrderByType.Desc) //创建时间
 
                 .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, cancellationToken);
 
@@ -315,24 +316,38 @@ namespace Hotline.Application.Planlibrary
             if (any)
                 throw UserFriendlyException.SameMessage("当前预案标题存在重复标题!");
 
-            _mapper.Map(dto, plan);
+            if (dto.ApplyStatus == EPlanApplyStatus.Delete)
+            {
+                plan.Status = (EPlanStatus)dto.Status;
+                plan.ApplyStatus = (EPlanApplyStatus)dto.ApplyStatus;
+                plan.Id = dto.Id;
+                plan.ApplyReason = dto.ApplyReason;
+            }
+            else
+            {
+                _mapper.Map(dto, plan);
 
-            plan.HotspotId = dto.HotspotId;
+                plan.HotspotId = dto.HotspotId;
 
-            if (dto.Files != null && dto.Files.Count > 0)
-                plan.FileJson = await _fileRepository.AddFileAsync(dto.Files, plan.Id, "", cancellationToken);
-            else
-                plan.FileJson = new List<Share.Dtos.File.FileJson>();
+                if (dto.Files != null && dto.Files.Count > 0)
+                    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.PlanTypes.Any())
+
+            if (dto.ApplyStatus != EPlanApplyStatus.Delete)
             {
-                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.PlanTypes);
-                types.ForEach(x => x.PlanId = dto.Id);
-                await _planRelationTypeRepository.AddRangeAsync(types, cancellationToken);
+                if (dto.PlanTypes.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.PlanTypes);
+                    types.ForEach(x => x.PlanId = dto.Id);
+                    await _planRelationTypeRepository.AddRangeAsync(types, cancellationToken);
+                }
             }
         }
 
@@ -381,7 +396,10 @@ namespace Hotline.Application.Planlibrary
             plan.ExaminTime = dto.ExaminTime;
             plan.ExaminManId = dto.ExaminManId;
             plan.ExaminOrganizeId = dto.ExaminOrganizeId;
+            plan.ExaminOpinion = dto.ExaminOpinion;
             plan.UpdateTime = dto.UpdateTime;
+            plan.OnShelfTime = dto.OnShelfTime;
+            plan.OffShelfTime = dto.OffShelfTime;
 
             if (plan.ApplyStatus == EPlanApplyStatus.Delete)
             {

+ 4 - 0
src/Hotline.Share/Dtos/Caselibrary/CaseDataDto.cs

@@ -137,6 +137,10 @@ namespace Hotline.Share.Dtos.Caselibrary
         /// </summary>
         public string HotspotName => HotspotType != null ? HotspotType.HotSpotFullName : string.Empty;
 
+        /// <summary>
+        /// 评分
+        /// </summary>
+        public decimal? Score { get; set; } = decimal.Zero;
     }
 
     public record CaseRelationTypeDto

+ 26 - 16
src/Hotline.Share/Dtos/Caselibrary/CaseListDto.cs

@@ -21,25 +21,25 @@ namespace Hotline.Share.Dtos.Caselibrary
         /// </summary>
         public string? Keyword { get; set; }
 
-        ///// <summary>
-        ///// 摘要
-        ///// </summary>
-        //public string? Abstract { get; set; }
+        /// <summary>
+        /// 摘要
+        /// </summary>
+        public string? Abstract { get; set; }
 
-        ///// <summary>
-        ///// 案例描述
-        ///// </summary>
-        //public string Describe { get; set; }
+        /// <summary>
+        /// 案例描述
+        /// </summary>
+        public string? Describe { get; set; }
 
-        ///// <summary>
-        ///// 案例结果
-        ///// </summary>
-        //public string Result { get; set; }
+        /// <summary>
+        /// 案例结果
+        /// </summary>
+        public string? Result { get; set; }
 
-        ///// <summary>
-        ///// 推荐理由
-        ///// </summary>
-        //public string Reason { get; set; }
+        /// <summary>
+        /// 推荐理由
+        /// </summary>
+        public string? Reason { get; set; }
 
         /// <summary>
         /// 是否热门
@@ -270,6 +270,16 @@ namespace Hotline.Share.Dtos.Caselibrary
         /// 审核意见
         /// </summary>
         public string ExaminOpinion { get; set; }
+
+        /// <summary>
+        /// 上架时间
+        /// </summary>
+        public DateTime? OnShelfTime { get; set; }
+
+        /// <summary>
+        /// 下架时间
+        /// </summary>
+        public DateTime? OffShelfTime { get; set; }
     }
 
     public record DelCaseListDto

+ 5 - 0
src/Hotline.Share/Dtos/Planlibrary/PlanDataDto.cs

@@ -142,6 +142,11 @@ namespace Hotline.Share.Dtos.Planlibrary
         /// </summary>
         public string HotspotName => HotspotType != null ? HotspotType.HotSpotFullName : string.Empty;
 
+        /// <summary>
+        /// 评分
+        /// </summary>
+        public decimal? Score { get; set; } = decimal.Zero;
+
     }
 
     public record PlanRelationTypeDto

+ 10 - 5
src/Hotline.Share/Dtos/Planlibrary/PlanListDto.cs

@@ -139,11 +139,6 @@ namespace Hotline.Share.Dtos.Planlibrary
         /// 排序(需要被排序的字段名)
         /// </summary>
         public string? SortField { get; set; }
-
-        /// <summary>
-        /// 排序方向 (0: 升序Asc; 1: 降序Desc)
-        /// </summary>
-        public int OrderByType { get; set; } = 1;
     }
 
 
@@ -246,6 +241,16 @@ namespace Hotline.Share.Dtos.Planlibrary
         /// 审核意见
         /// </summary>
         public string ExaminOpinion { get; set; }
+
+        /// <summary>
+        /// 上架时间
+        /// </summary>
+        public DateTime? OnShelfTime { get; set; }
+
+        /// <summary>
+        /// 下架时间
+        /// </summary>
+        public DateTime? OffShelfTime { get; set; }
     }
 
     public record DelPlanListDto