田爽 5 сар өмнө
parent
commit
7c24d4bafd

+ 35 - 11
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -213,16 +213,28 @@ namespace Hotline.Api.Controllers
             var know = await _knowledgeRepository.GetAsync(Id, HttpContext.RequestAborted);
             if (know != null && know.Status == EKnowledgeStatus.OnShelf)
             {
-                know.Status = EKnowledgeStatus.OffShelf;
-                know.OnShelfTime = null;
-                know.OffShelfTime = DateTime.Now;
-                await _knowledgeRepository.UpdateAsync(know, HttpContext.RequestAborted);
-
-                var pushKnowledge = _mapper.Map<KnowledgeSendDto>(know);
-                pushKnowledge.CategoryCode = "01";
-                pushKnowledge.CategoryName = "公共服务";
-                //推省上
-                await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeRemove, pushKnowledge, cancellationToken: HttpContext.RequestAborted);
+                if (_sessionContext.OrgIsCenter)
+                {
+                    know.Status = EKnowledgeStatus.OffShelf;
+                    know.OnShelfTime = null;
+                    know.OffShelfTime = DateTime.Now;
+                    await _knowledgeRepository.UpdateAsync(know, HttpContext.RequestAborted);
+
+                    var pushKnowledge = _mapper.Map<KnowledgeSendDto>(know);
+                    pushKnowledge.CategoryCode = "01";
+                    pushKnowledge.CategoryName = "公共服务";
+                    //推省上
+                    await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeRemove, pushKnowledge, cancellationToken: HttpContext.RequestAborted);
+                }
+                else {
+	                know.Status = EKnowledgeStatus.OffShelfAudit;
+	                await _knowledgeRepository.UpdateAsync(know, HttpContext.RequestAborted);
+
+					var startDto = _mapper.Map<StartWorkflowDto>(know.Workflow);
+					startDto.DefinitionModuleCode = WorkflowModuleConsts.KnowledgeOffshelf;
+					startDto.Title = "知识库下架";
+					await StartFlow(know.Id, WorkflowModuleConsts.KnowledgeOffshelf, EKnowledgeApplyType.Offshelf, startDto);
+				}
             }
             else
                 throw UserFriendlyException.SameMessage("知识下架失败");
@@ -294,6 +306,18 @@ namespace Hotline.Api.Controllers
             else
                 knowledge.FileJson = new List<Share.Dtos.File.FileJson>();
             if (dto.Workflow != null) knowledge.Renewaln = knowledge.Status != EKnowledgeStatus.Drafts;
+            //临时处理 修改后提交修改基本信息
+            if (!_sessionContext.OrgIsCenter)
+            {
+                knowledge.Attribution = "部门知识库";
+            }
+            knowledge.CreatorId = _sessionContext.UserId;
+            knowledge.CreatorName = _sessionContext.UserName;
+            knowledge.CreatorOrgId = _sessionContext.OrgId;
+            knowledge.CreatorOrgName = _sessionContext.OrgName;
+            knowledge.CreatorOrgLevel = _sessionContext.OrgLevel;
+
+
             await _knowledgeRepository.UpdateAsync(knowledge, HttpContext.RequestAborted);
             if (dto.Data.KnowledgeType.Any())
             {
@@ -413,7 +437,7 @@ namespace Hotline.Api.Controllers
                 throw UserFriendlyException.SameMessage("无效知识库数据");
             if (knowledge.Status == EKnowledgeStatus.OnShelf || knowledge.Status == EKnowledgeStatus.Auditing)
                 throw UserFriendlyException.SameMessage("知识库数据不可删除");
-            if (knowledge.Status == EKnowledgeStatus.Drafts)
+            if (knowledge.Status == EKnowledgeStatus.Drafts || knowledge.Status == EKnowledgeStatus.Revert)
             {
                 await _knowledgeRepository.RemoveAsync(knowledge, false, HttpContext.RequestAborted);
             }

+ 3 - 2
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -102,8 +102,9 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                 case WorkflowModuleConsts.KnowledgeAdd://新增知识库
                 case WorkflowModuleConsts.KnowledgeUpdate://修改知识库
                 case WorkflowModuleConsts.KnowledgeDelete://删除知识库
-                    //var knowledgeWork = await _knowledgeWorkFlowRepository.Queryable().Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
-                    var knowledge = await _knowledgeRepository.Queryable().Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
+                case WorkflowModuleConsts.KnowledgeOffshelf: //下架知识库
+					//var knowledgeWork = await _knowledgeWorkFlowRepository.Queryable().Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
+					var knowledge = await _knowledgeRepository.Queryable().Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
                     knowledge.Flowed(workflow.FlowedUserIds, workflow.FlowedOrgIds, workflow.HandlerUsers, workflow.HandlerOrgs);
                     await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
                     if (isReviewPass)

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -233,7 +233,8 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
                     break;
                 case WorkflowModuleConsts.KnowledgeAdd:
                 case WorkflowModuleConsts.KnowledgeUpdate:
-                case WorkflowModuleConsts.KnowledgeDelete:
+                case WorkflowModuleConsts.KnowledgeOffshelf:
+				case WorkflowModuleConsts.KnowledgeDelete:
                     //var knowledgeWork = await _knowledgeWorkFlowRepository.Queryable().Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
                     var knowledge = await _knowledgeRepository.Queryable().Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
                     knowledge.Flowed(workflow.FlowedUserIds, workflow.FlowedOrgIds, workflow.HandlerUsers, workflow.HandlerOrgs);

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowPreviousHandler.cs

@@ -191,7 +191,8 @@ namespace Hotline.Application.Handlers.FlowEngine
                     case WorkflowModuleConsts.KnowledgeAdd:
                     case WorkflowModuleConsts.KnowledgeUpdate:
                     case WorkflowModuleConsts.KnowledgeDelete:
-                    case WorkflowModuleConsts.TelRestApply:
+                    case WorkflowModuleConsts.KnowledgeOffshelf:
+					case WorkflowModuleConsts.TelRestApply:
                         break;
                     case WorkflowModuleConsts.OrderTerminate:
 	                    var orderTerminate = await _orderTerminateRepository.Queryable()

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowRecallHandler.cs

@@ -134,7 +134,8 @@ public class WorkflowRecallHandler : INotificationHandler<RecallNotify>
                 case WorkflowModuleConsts.KnowledgeAdd:
                 case WorkflowModuleConsts.KnowledgeUpdate:
                 case WorkflowModuleConsts.KnowledgeDelete:
-                case WorkflowModuleConsts.TelRestApply:
+                case WorkflowModuleConsts.KnowledgeOffshelf:
+				case WorkflowModuleConsts.TelRestApply:
                     break;
             }
         }

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowStartHandler.cs

@@ -215,7 +215,8 @@ namespace Hotline.Application.Handlers.FlowEngine
                     case WorkflowModuleConsts.KnowledgeAdd:
                     case WorkflowModuleConsts.KnowledgeUpdate:
                     case WorkflowModuleConsts.KnowledgeDelete:
-                        await _knowledgeDomainService.UpdateWorkFlowId(workflow.ExternalId, workflow.Id,
+                    case WorkflowModuleConsts.KnowledgeOffshelf:
+						await _knowledgeDomainService.UpdateWorkFlowId(workflow.ExternalId, workflow.Id,
                             workflow.HandlerUsers, workflow.HandlerOrgs, workflow.FlowedUserIds, workflow.FlowedOrgIds,
                             cancellationToken);
                         break;

+ 11 - 4
src/Hotline.Application/Knowledge/KnowApplication.cs

@@ -91,7 +91,7 @@ namespace Hotline.Application.Knowledge
                 .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.EndsWith(typeSpliceName)))
+                .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.SourceOrganizeId != null && x.SourceOrganizeId.EndsWith(pagedDto.CreateOrgId!))
                 .WhereIF(!string.IsNullOrEmpty(pagedDto.ModuleCode), x => x.Workflow.ModuleCode == pagedDto.ModuleCode)
@@ -206,12 +206,19 @@ namespace Hotline.Application.Knowledge
 
         public async Task<(int, IList<PageViewOutDto>)> GetPageViewListAsync(PageViewInDto dto, CancellationToken requestAborted = default)
         {
-            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))
                 .WhereIF(dto.CreatorName.NotNullOrEmpty(), (p, k, r) => p.CreatorName.Contains(dto.CreatorName))
-                .WhereIF(dto.KnowledgeTypeId.NotNullOrEmpty(), (p, k, r) => r.KnowledgeTypeId == dto.KnowledgeTypeId)
+                .WhereIF(dto.KnowledgeTypeId.NotNullOrEmpty(), (p, k, r) => r.KnowledgeTypeSpliceName.StartsWith(typeSpliceName))
                 .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, (p, k, r) => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
                 .OrderByDescending((p, k, r) => p.CreationTime);
 
@@ -281,7 +288,7 @@ namespace Hotline.Application.Knowledge
                 .Where(x => x.IsDeleted == false)
                 .Where(x => x.Status == EKnowledgeStatus.OnShelf)
                 .Where(x => x.KnowledgeType.Any(t => t.KnowledgeType.KnowledgeTypeOrgs.Any(to => to.OrgId == _sessionContext.RequiredOrgId) || t.KnowledgeType.KnowledgeTypeOrgs.Any() == false))
-                .WhereIF(!string.IsNullOrEmpty(typeSpliceName), x => x.KnowledgeType.Any(t => t.KnowledgeTypeSpliceName.EndsWith(typeSpliceName)))
+                .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(dto.HotspotName), x => x.HotspotType.HotSpotFullName.EndsWith(dto.HotspotName!))
                 .WhereIF(!string.IsNullOrEmpty(dto.CreateOrgId), x => x.CreatorOrgId != null && x.CreatorOrgId.EndsWith(dto.CreateOrgId!))

+ 6 - 0
src/Hotline.Share/Enums/KnowledgeBase/EKnowledgeApplyType.cs

@@ -24,6 +24,12 @@ public enum EKnowledgeApplyType
     /// </summary>
     [Description("删除")]
     Delete = 2,
+
+	/// <summary>
+	/// 下架
+	/// </summary>
+	[Description("下架")]
+    Offshelf = 3,
 }
 
 /// <summary>

+ 10 - 4
src/Hotline.Share/Enums/KnowledgeBase/EKnowledgeStatus.cs

@@ -7,10 +7,10 @@ namespace Hotline.Share.Enums.KnowledgeBase;
 /// </summary>
 public enum EKnowledgeStatus
 {
-    /// <summary>
-    /// 草稿
-    /// </summary>
-    [Description("草稿")]
+	/// <summary>
+	/// 待提交
+/// </summary>
+	[Description("待提交")]
     Drafts = 0,
 
     /// <summary>
@@ -48,4 +48,10 @@ public enum EKnowledgeStatus
 	/// </summary>
 	[Description("已过期")]
 	Overdue = 6,
+
+	/// <summary>
+	/// 下架审批中
+	/// </summary>
+	[Description("下架审批中")]
+	OffShelfAudit = 7,
 }

+ 9 - 3
src/Hotline/FlowEngine/WorkflowModules/WorkflowModuleConsts.cs

@@ -35,9 +35,14 @@ public class WorkflowModuleConsts
     public const string KnowledgeUpdate = "KnowledgeUpdate";
 
     /// <summary>
-    /// 知识删除
+    /// 知识下架
     /// </summary>
-    public const string KnowledgeDelete = "KnowledgeDelete";
+    public const string KnowledgeOffshelf = "KnowledgeOffshelf";
+
+	/// <summary>
+	/// 知识删除
+	/// </summary>
+	public const string KnowledgeDelete = "KnowledgeDelete";
 
     /// <summary>
     /// 分机小休申请
@@ -59,8 +64,9 @@ public class WorkflowModuleConsts
         new()
         {
             new(OrderHandle, "工单办理"),
-            new(KnowledgeAdd, "新增知识审批"),
+            new(KnowledgeAdd, "新增知识"),
             new(KnowledgeUpdate, "知识更新"),
+            new(KnowledgeOffshelf,"知识下架"),
             new(KnowledgeDelete, "知识删除"),
             new(TelRestApply, "分机小休申请"),
             new(OrderDelay,"工单延期"),

+ 19 - 6
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -218,11 +218,16 @@ namespace Hotline.KnowledgeBase
 	        workFlow.ActualOpinion = workflow.ActualOpinion;
 	        await _knowledgeWorkFlowRepository.UpdateAsync(workFlow, cancellationToken);
 
-
-            //现有知识状态更改为已撤回
-            knowledge.Status = EKnowledgeStatus.Revert;
-            await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
-
+            if (workflow.ModuleCode == WorkflowModuleConsts.KnowledgeOffshelf)
+            {
+                knowledge.Status = EKnowledgeStatus.OnShelf;
+                await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+            }
+            else {
+				//现有知识状态更改为已撤回
+				knowledge.Status = EKnowledgeStatus.Revert;
+				await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+			}
 			//switch (workFlow.WorkflowModuleStatus)
    //         {
    //             case EKnowledgeApplyType.Add:
@@ -315,7 +320,15 @@ namespace Hotline.KnowledgeBase
 
                     isSendType = "2";
                     break;
-            }
+                case WorkflowModuleConsts.KnowledgeOffshelf://下架
+	                //知识先下架                          
+	                knowledge.Status = EKnowledgeStatus.OffShelf;
+	                knowledge.OffShelfTime = System.DateTime.Now;
+	                knowledge.WorkflowId = workflow.Id;
+	                await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+	                isSendType = "2";
+	                break;
+			}
 
             #region 数据推送
             var pushKnowledge = _mapper.Map<KnowledgeSendDto>(knowledge);