|
@@ -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}";
|
|
|
}
|
|
|
|
|
|
|