xf 3 tháng trước cách đây
mục cha
commit
c3b08985fb

+ 36 - 0
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -306,6 +306,42 @@ namespace Hotline.Api.Controllers
 
         }
 
+        /// <summary>
+        /// 知识库-知识下架并发起审批(new)
+        /// </summary>
+        [HttpPost("offshelf-and-approve")]
+        [LogFilter("知识下架")]
+        public async Task OffShelfAndApprove([FromBody] OffShelfKnowledgeDto dto)
+        {
+            var kn = await _knowledgeRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+            if (kn is null) throw new UserFriendlyException("无效知识id");
+            if (kn.Status == EKnowledgeStatus.OffShelf) return;
+            if (kn.Status != EKnowledgeStatus.OnShelf) throw new UserFriendlyException("知识下架失败");
+
+            if (_sessionContext.OrgIsCenter || !_appOptions.Value.IsYiBin)
+            {
+                kn.Status = EKnowledgeStatus.OffShelf;
+                kn.OnShelfTime = null;
+                kn.OffShelfTime = DateTime.Now;
+                await _knowledgeRepository.UpdateAsync(kn, HttpContext.RequestAborted);
+
+                var pushKnowledge = _mapper.Map<KnowledgeSendDto>(kn);
+                pushKnowledge.CategoryCode = "01";
+                pushKnowledge.CategoryName = "公共服务";
+                //推省上
+                await _capPublisher.PublishAsync(EventNames.HotlineKnowledgeRemove, pushKnowledge, cancellationToken: HttpContext.RequestAborted);
+            }
+            else
+            {
+                kn.Status = EKnowledgeStatus.Auditing;
+                await _knowledgeRepository.UpdateAsync(kn, HttpContext.RequestAborted);
+
+                var approve = await _knowledgeDomainService.AddKnowledgeApproveAsync(EKnowledgeApproveType.OffShelf,
+                    kn.Id, null, HttpContext.RequestAborted);
+            }
+
+        }
+
         /// <summary>
         /// 知识库-知识上架
         /// </summary>

+ 2 - 2
src/Hotline.Api/config/appsettings.Development.json

@@ -62,13 +62,13 @@
     }
   },
   "ConnectionStrings": {
-    "Hotline": "PORT=5432;DATABASE=hotline;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
+    "Hotline": "PORT=5432;DATABASE=hotline_dev;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
   },
   "Cache": {
     "Host": "110.188.24.182",
     "Port": 50179,
     "Password": "fengwo123!$!$",
-    "Database": 3 //test:3, dev:5
+    "Database": 5 //test:3, dev:5
   },
   "Swagger": true,
   "AccLog":  false,

+ 51 - 33
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -226,23 +226,24 @@ namespace Hotline.KnowledgeBase
                 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:
-   //                 //将知识保存为草稿
-   //                 knowledge.Status = EKnowledgeStatus.Drafts;
-   //                 await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
-   //                 break;
-   //             default:
-   //                 //现有知识状态更改为已撤回
-   //                 knowledge.Status = EKnowledgeStatus.Revert;
-   //                 await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
-   //                 break;
+            else
+            {
+                //现有知识状态更改为已撤回
+                knowledge.Status = EKnowledgeStatus.Revert;
+                await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+            }
+            //switch (workFlow.WorkflowModuleStatus)
+            //         {
+            //             case EKnowledgeApplyType.Add:
+            //                 //将知识保存为草稿
+            //                 knowledge.Status = EKnowledgeStatus.Drafts;
+            //                 await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+            //                 break;
+            //             default:
+            //                 //现有知识状态更改为已撤回
+            //                 knowledge.Status = EKnowledgeStatus.Revert;
+            //                 await _knowledgeRepository.UpdateAsync(knowledge, cancellationToken);
+            //                 break;
 
 
             //}
@@ -324,14 +325,14 @@ 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;
-			}
+                                                            //知识先下架                          
+                    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);
@@ -435,11 +436,18 @@ namespace Hotline.KnowledgeBase
 
         public async Task<Knowledge> UpdateKnowledgeAsync(UpdateKnowledgeDto dto, CancellationToken cancellation)
         {
-            var knowledge = _mapper.Map<Knowledge>(dto);
+            var knowledge = await _knowledgeRepository.GetAsync(d => d.Id == dto.Id, cancellation);
+            if (knowledge == null)
+                throw UserFriendlyException.SameMessage("无效知识编号");
+            if (knowledge.Status == EKnowledgeStatus.OnShelf
+                || knowledge.Status == EKnowledgeStatus.Auditing
+                || (knowledge.ExpiredTime.HasValue && knowledge.ExpiredTime.Value > DateTime.Now))
+                throw UserFriendlyException.SameMessage("知识库数据不可修改");
             var any = await _knowledgeRepository.Queryable()
                 .AnyAsync(x => x.Status == EKnowledgeStatus.OnShelf && x.Title == dto.Title && x.Id != dto.Id, cancellation);
             if (any) throw UserFriendlyException.SameMessage("当前知识标题已存在!");
 
+            _mapper.Map(dto, knowledge);
             if (dto.Files.Any())
                 knowledge.FileJson = await _fileRepository.AddFileAsync(dto.Files, knowledge.Id, "", cancellation);
             else
@@ -461,18 +469,28 @@ namespace Hotline.KnowledgeBase
 
             if (dto.KnowledgeType.Any())
             {
-                var knTypes = _mapper.Map<List<KnowledgeType>>(dto.KnowledgeType);
-                knowledge.KnowledgeTypes = knTypes;
+                //var knTypes = _mapper.Map<List<KnowledgeType>>(dto.KnowledgeType);
+                //var knTypes = dto.KnowledgeType.Select(d => new KnowledgeType
+                //{
+                //    Id = d.KnowledgeTypeId,
+                //}).ToList();
+                knowledge.KnowledgeTypes = dto.KnowledgeType.Select(d => new KnowledgeType
+                {
+                    Id = d.KnowledgeTypeId,
+                }).ToList(); 
+                await _knowledgeRepository.UpdateNav(knowledge)
+                    .Include(d => d.KnowledgeTypes)
+                    .ExecuteCommandAsync();
+            }
+            else
+            {
+                await _knowledgeRepository.UpdateAsync(knowledge, cancellation);
             }
-
-            await _knowledgeRepository.UpdateNav(knowledge)
-                .Include(d => d.KnowledgeTypes)
-                .ExecuteCommandAsync();
 
             return knowledge;
         }
 
 
-        
+
     }
 }