xf il y a 3 mois
Parent
commit
a40917f2a9

+ 56 - 40
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -958,7 +958,7 @@ namespace Hotline.Api.Controllers
         }
 
         /// <summary>
-        /// 下载知识导入模板
+        /// 下载知识导入模板(new)
         /// </summary>
         /// <returns></returns>
         [HttpGet("dl-template")]
@@ -970,51 +970,67 @@ namespace Hotline.Api.Controllers
             }, "知识模板.xlsx");
         }
 
+        /// <summary>
+        /// 导入知识(new)
+        /// </summary>
+        /// <param name="file"></param>
+        /// <returns></returns>
         [HttpPost("import-knowledge")]
-        public async Task<object> ImportKnowledge(IFormFile file)
-        {
-            using (var stream = new MemoryStream())
+        public async Task<string> ImportKnowledge(IFormFile file)
+        {
+            using var stream = new MemoryStream();
+            await file.CopyToAsync(stream);
+            var items = stream.Query<KnowledgeImportTemplate>().ToList();
+            if (items == null || !items.Any()) return "未读取到数据";
+
+            if (items.Any(d => d.Attribution != "中心知识库" && d.Attribution != "部门知识库"))
+                return "请正确输入知识归属";
+            if (items.Any(d => d.IsPublic != "是" && d.IsPublic != "否"))
+                return "请正确输入是否公开";
+            if (items.Any(d => string.IsNullOrEmpty(d.Title)))
+                return "请输入标题";
+            if (items.Any(d => string.IsNullOrEmpty(d.Content)))
+                return "请输入内容";
+
+            var titles = items.Select(d => d.Title).ToList();
+            var exists = await _knowledgeRepository.Queryable()
+                .Where(d => titles.Contains(d.Title))
+                .ToListAsync(HttpContext.RequestAborted);
+            if (exists.Any())
+                return $"标题重复:{string.Join(',', exists.Select(d => d.Title))}";
+
+            var inputLevelOneTypes = items.Select(d => d.KnowledgeTypeLevelOne)
+                .Distinct().ToList();
+            var levelOneTypes = await _knowledgeTypeRepository.Queryable()
+                .Where(d => d.IsEnable && d.ParentId == null)
+                .ToListAsync(HttpContext.RequestAborted);
+            var existLevelOneNames = levelOneTypes.Select(d => d.Name);
+            var notExists = inputLevelOneTypes.Except(existLevelOneNames).ToList();
+            if (notExists.Any())
+                return $"不存在的一级分类名称:{string.Join(',', notExists)}";
+
+            var sb = new StringBuilder();
+            var kns = new List<Knowledge>();
+            foreach (var item in items)
             {
-                await file.CopyToAsync(stream);
-                var items = stream.Query<KnowledgeImportTemplate>().ToList();
-                if (items == null || !items.Any()) return "未读取到数据";
-
-                if (items.Any(d => d.Attribution != "中心知识库" && d.Attribution != "部门知识库"))
-                    return "请正确输入知识归属";
-                if (items.Any(d => d.IsPublic != "是" && d.IsPublic != "否"))
-                    return "请正确输入是否公开";
-                if (items.Any(d => string.IsNullOrEmpty(d.Title)))
-                    return "请输入标题";
-                if (items.Any(d => string.IsNullOrEmpty(d.Content)))
-                    return "请输入内容";
-
-                var titles = items.Select(d => d.Title).ToList();
-                var exists = await _knowledgeRepository.Queryable()
-                    .Where(d => titles.Contains(d.Title))
-                    .ToListAsync(HttpContext.RequestAborted);
-                if (exists.Any())
-                    return $"标题重复:{string.Join(',', exists.Select(d => d.Title))}";
-
-                var inputLevelOneTypes = items.Select(d => d.KnowledgeTypeLevelOne).ToList();
-                var levelOneTypes = await _knowledgeTypeRepository.Queryable()
-                    .Where(d => d.IsEnable && d.ParentId == null)
-                    .ToListAsync(HttpContext.RequestAborted);
-                var existLevelOneNames = levelOneTypes.Select(d => d.Name);
-                var notExists = inputLevelOneTypes.Except(existLevelOneNames).ToList();
-                if(notExists.Any())
-                    return $"不存在的一级分类名称:{string.Join(',', notExists)}";
-
-                foreach (var item in items)
+                var kn = _mapper.Map<Knowledge>(item);
+                var knType = levelOneTypes.FirstOrDefault(d => d.Name == item.KnowledgeTypeLevelOne);
+                if (knType is null)
                 {
-                    var kn = _mapper.Map<Knowledge>(item);
-                    var knType = levelOneTypes.FirstOrDefault(d => d.Name == item.KnowledgeTypeLevelOne);
+                    sb.Append($"错误一级分类:{item.KnowledgeTypeLevelOne}");
+                    continue;
                 }
+                kn.KnowledgeTypes = new List<KnowledgeType> { knType };
+                kn.IsPublic = item.IsPublic == "是";
+                kns.Add(kn);
+            }
 
-                return new
-                {
+            await _knowledgeRepository.AddRangeAsync(kns, HttpContext.RequestAborted);
 
-                };
-            }
+            var err = sb.ToString();
+            return string.IsNullOrEmpty(err)
+                ? $"导入{items.Count}条,成功{kns.Count}条"
+                : $"导入{items.Count}条,成功{kns.Count}条,{err}";
         }
 
 

+ 2 - 2
src/Hotline/KnowledgeBase/KnowledgeImportTemplate.cs

@@ -28,8 +28,8 @@ namespace Hotline.KnowledgeBase
         [ExcelColumnName("是否公开(是/否)")]
         public string IsPublic { get; set; }
 
-        [ExcelColumnName("热点分类")]
-        public string? HotspotName { get; set; }
+        //[ExcelColumnName("热点分类")]
+        //public string? HotspotName { get; set; }
 
         /// <summary>
         /// 标题