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

+ 66 - 14
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -1,5 +1,4 @@
-using DocumentFormat.OpenXml.Wordprocessing;
-using DotNetCore.CAP;
+using DotNetCore.CAP;
 using Hotline.Api.Filter;
 using Hotline.Application.Bulletin;
 using Hotline.Application.ExportExcel;
@@ -13,14 +12,11 @@ using Hotline.FlowEngine.WorkflowModules;
 using Hotline.FlowEngine.Workflows;
 using Hotline.KnowledgeBase;
 using Hotline.KnowledgeBase.Notifies;
-using Hotline.Permissions;
 using Hotline.Repository.SqlSugar.Extensions;
-using Hotline.Repository.SqlSugar.Knowledge;
 using Hotline.Repository.SqlSugar.Ts;
 using Hotline.Settings;
 using Hotline.Settings.Hotspots;
 using Hotline.Share.Dtos;
-using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Knowledge;
 using Hotline.Share.Dtos.Order;
@@ -30,24 +26,18 @@ using Hotline.Share.Enums.KnowledgeBase;
 using Hotline.Share.Mq;
 using Hotline.Share.Tools;
 using Hotline.Users;
-using J2N.Text;
 using Mapster;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.EntityFrameworkCore.Metadata.Internal;
-using Org.BouncyCastle.Utilities.IO;
 using SqlSugar;
 using System.Text;
-using System.Threading;
 using Hotline.Configurations;
 using Microsoft.Extensions.Options;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
-using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
-using Hotline.Share.Dtos.Schedulings;
 
 namespace Hotline.Api.Controllers
 {
@@ -57,6 +47,7 @@ namespace Hotline.Api.Controllers
         #region 注入
         private readonly IExportApplication _exportApplication;
         private readonly IRepository<KnowledgeHotWord> _knowledgeHotWordRepository;
+        private readonly IRepository<KnowledgeApprove> _knowledgeApproRepository;
         private readonly IRepository<KnowledgeWord> _knowledgeWordRepository;
         private readonly IWordHelperService _wordHelperService;
         private readonly BaseDataApplication _baseDataApplication;
@@ -122,7 +113,8 @@ namespace Hotline.Api.Controllers
             IRepository<KnowledgeWord> knowledgeWordRepository,
             IRepository<KnowledgeHotWord> knowledgeWordHotRepository,
            IOptionsSnapshot<AppConfiguration> appOptions,
-            IRepository<KnowledgeHotWord> knowledgeHotWordRepository)
+            IRepository<KnowledgeHotWord> knowledgeHotWordRepository,
+           IRepository<KnowledgeApprove> knowledgeApproRepository)
         {
             _knowledgeRepository = knowledgeRepository;
             _sessionContext = sessionContext;
@@ -155,6 +147,7 @@ namespace Hotline.Api.Controllers
             _knowledgePvepository = knowledgePvepository;
             _knowledgeWordRepository = knowledgeWordRepository;
             _knowledgeHotWordRepository = knowledgeHotWordRepository;
+            _knowledgeApproRepository = knowledgeApproRepository;
             _appOptions = appOptions;
         }
 
@@ -208,6 +201,50 @@ namespace Hotline.Api.Controllers
             return kn.Id;
         }
 
+        /// <summary>
+        /// 知识库-新增(new)
+        /// </summary>
+        [HttpPost]
+        public async Task<string> Add([FromBody] AddKnowledgeDto dto)
+        {
+            //add kn
+            var kn = _mapper.Map<Knowledge>(dto);
+            kn.SourceOrganizeId = _sessionContext.RequiredOrgId;
+            var any = await _knowledgeRepository.Queryable().Where(x => x.Status == EKnowledgeStatus.OnShelf && x.Title == kn.Title).AnyAsync();
+            if (any) throw UserFriendlyException.SameMessage("当前知识标题存在重复标题!");
+
+            //Code为空,从新生成Code
+            if (string.IsNullOrEmpty(kn.Code))
+                kn.Code = Convert.ToInt64((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds).ToString();
+
+            kn.Status = EKnowledgeStatus.Drafts;
+            kn.InitId();
+            if (dto.Files.NotNullOrEmpty()) kn.FileJson = await _fileRepository.AddFileAsync(dto.Files, kn.Id, "", HttpContext.RequestAborted);
+            //await _knowledgeRepository.AddAsync(kn, HttpContext.RequestAborted);
+
+            if (dto.KnowledgeType.Any())
+            {
+                List<KnowledgeRelationType> types = _mapper.Map<List<KnowledgeRelationType>>(dto.Data.KnowledgeType);
+                types.ForEach(x => x.KnowledgeId = kn.Id);
+                await _knowledgeRelationTypeRepository.AddRangeAsync(types, HttpContext.RequestAborted);
+            }
+
+
+            //发起新增审批
+            var approveAdd = new KnowledgeApprove
+            {
+                KnowledgeId = kn.Id,
+                KnowledgeApproveType = EKnowledgeApproveType.Add,
+                KnowledgeApproveStatus = EKnowledgeApproveStatus.Unhandle,
+                Knowledge = kn
+            };
+            await _knowledgeApproRepository.AddNav(approveAdd)
+                .Include(d => d.Knowledge)
+                .ExecuteCommandAsync();
+
+            return kn.Id;
+        }
+
         /// <summary>
         /// 知识库-知识下架
         /// </summary>
@@ -361,10 +398,21 @@ namespace Hotline.Api.Controllers
         }
 
         /// <summary>
-        /// 批量审核
+        /// 知识库-修改(new)
         /// </summary>
+        /// <param name="dto"></param>
         /// <returns></returns>
-        [HttpPost("batch_audit")]
+        [HttpPut]
+        [LogFilter("知识修改")]
+        public async Task UpdateKnowledge([FromBody] UpdateKnowledgeDto dto)
+        {
+        }
+
+        /// <summary>
+            /// 批量审核
+            /// </summary>
+            /// <returns></returns>
+            [HttpPost("batch_audit")]
         public async Task<string> KnowledgeBatchAuditAsync([FromBody] KnowledgeBatchAuditInDto dto)
         {
             var result = new StringBuilder();
@@ -1635,5 +1683,9 @@ namespace Hotline.Api.Controllers
         }
 
         #endregion
+
+        #region 知识审批
+
+        #endregion
     }
 }

+ 99 - 0
src/Hotline/KnowledgeBase/KnowledgeApprove.cs

@@ -0,0 +1,99 @@
+using Hotline.Orders;
+using Hotline.Settings;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Users;
+using XF.Domain.Repository;
+
+namespace Hotline.KnowledgeBase
+{
+    [Description("知识审核")]
+    [SugarIndex("index_order_creationtime", nameof(KnowledgeApprove.CreationTime), OrderByType.Desc)]
+    public class KnowledgeApprove : CreationEntity
+    {
+        /// <summary>
+        /// 知识Id
+        /// </summary>
+        public string KnowledgeId { get; set; }
+
+        /// <summary>
+        /// 审核类型
+        /// </summary>
+        public EKnowledgeApproveType KnowledgeApproveType { get; set; }
+
+        /// <summary>
+        /// 审核状态
+        /// </summary>
+        public EKnowledgeApproveStatus KnowledgeApproveStatus { get; set; }
+
+        /// <summary>
+        /// 审批发起意见
+        /// </summary>
+        public string? CreateOpinion { get; set; }
+
+        /// <summary>
+        /// 审批人Id
+        /// </summary>
+        public string? ApproverId { get; set; }
+
+        /// <summary>
+        /// 审核意见
+        /// </summary>
+        public string? ApproveOpinion { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? ApproveTime { get; set; }
+
+        [Navigate(NavigateType.OneToOne, nameof(KnowledgeId))]
+        public Knowledge Knowledge { get; set; }
+
+        /// <summary>
+        /// 发起人
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(CreatorId))]
+        public User Creator { get; set; }
+
+        /// <summary>
+        /// 审批人
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(ApproverId))]
+        public User Approver { get; set; }
+    }
+
+    /// <summary>
+    /// 审核状态
+    /// </summary>
+    public enum EKnowledgeApproveStatus
+    {
+        [Description("待审批")]
+        Unhandle = 0,
+
+        [Description("通过")]
+        Successed = 1,
+
+        [Description("不通过")]
+        Failed = 2,
+    }
+
+    /// <summary>
+    /// 审核类型
+    /// </summary>
+    public enum EKnowledgeApproveType
+    {
+        [Description("新增知识")]
+        Add = 0,
+
+        [Description("更新知识")]
+        Update = 1,
+
+        [Description("删除知识")]
+        Delete = 2,
+    }
+}