ow
This commit is contained in:
1 parent
d795476b1f
commit
0ba1352862
29 files changed
+526
-157
No files matched your search
@@ -2,11 +2,21 @@
|
||||
using CloudBuilder.AI.Entity;
|
||||
using CloudBuilder.AI.Policy;
|
||||
using CloudBuilder.AI.SearchCriteria;
|
||||
using CloudBuilder.AI.Service.Utility;
|
||||
using CloudBuilder.Core.DatabaseAccessor;
|
||||
using CloudBuilder.Core.DatabaseAccessor.Entity;
|
||||
using CloudBuilder.Core.Service;
|
||||
using CloudBuilder.Security.Data;
|
||||
using CloudBuilder.Security.Entity;
|
||||
using CloudBuilder.Security.Policy;
|
||||
using CloudBuilder.Security.Service;
|
||||
using CloudBuilder.Security.Utility;
|
||||
using DocumentFormat.OpenXml.ExtendedProperties;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Diagnostics.Contracts;
|
||||
using System.Text;
|
||||
using System.Transactions;
|
||||
namespace CloudBuilder.AI.Service
|
||||
{
|
||||
public class AiBookService : IAiBookService
|
||||
@@ -21,20 +31,71 @@ namespace CloudBuilder.AI.Service
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiBookEntity FindByKey(string key)
|
||||
public AiBookData FindByKey(string key)
|
||||
{
|
||||
return repository.DetachedEntities.Where(x => x.Guid == key).FirstOrDefault()!;
|
||||
AiBookData data = new AiBookData();
|
||||
data.AiBook = repository.DetachedEntities.Where(x => x.Guid == key).FirstOrDefault()!;
|
||||
|
||||
if (data.AiBook.FileId > 0)
|
||||
{
|
||||
IRepository<BookDmsFileViewEntity> repositoryUploadDmsFile = service.GetRepository<IRepository<BookDmsFileViewEntity>>();
|
||||
BookDmsFileViewEntity dms;
|
||||
|
||||
dms = repositoryUploadDmsFile.DetachedEntities.Where(x => x.FileId == data.AiBook.FileId).FirstOrDefault()!;
|
||||
data.FileName = dms.OrgFileName;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiBookEntity FindByTitle(string title)
|
||||
{
|
||||
return repository.DetachedEntities.Where(x => x.Title == title).FirstOrDefault()!;
|
||||
}
|
||||
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public dynamic FindBySearchCriteria(AiBookSearchCriteria criteria)
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiBookResultData FindBySearchCriteria(AiBookSearchCriteria criteria)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
AiBookResultData data = new AiBookResultData();
|
||||
AiBookEntity[] list = null;
|
||||
|
||||
int count = 0;
|
||||
|
||||
string sqlWhere = null;
|
||||
|
||||
if (criteria.Filter != null && criteria.Filter.Length > 0)
|
||||
{
|
||||
sqlWhere = SearchFilter.ComposeWhereClause(criteria.Filter);
|
||||
}
|
||||
|
||||
AiBookEntity entity = AiBookEntity.GetInstance();
|
||||
string sql = entity.GetSelectTopFrom(criteria.limit, criteria.page, criteria.orderby.StringToDbField(), criteria.orderbytag, sqlWhere);
|
||||
|
||||
string err = null;
|
||||
try
|
||||
{
|
||||
list = repository.FromSql(sql).ToArray();
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
err = ex.Message;
|
||||
}
|
||||
|
||||
|
||||
if (list != null && list.Length > 0)
|
||||
{
|
||||
sql = entity.GetSelectCountFrom(sqlWhere);
|
||||
count = (int)repository.ExecuteScalar(sql);
|
||||
}
|
||||
|
||||
data.Limit = criteria.limit;
|
||||
data.Page = criteria.page;
|
||||
data.Datas = list;
|
||||
data.Total = count;
|
||||
//data.Sql = sql;
|
||||
data.ErrorMessage = err;
|
||||
return data;
|
||||
}
|
||||
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Print)]
|
||||
@@ -43,16 +104,16 @@ namespace CloudBuilder.AI.Service
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Insert)]
|
||||
[UnitOfWork]
|
||||
public AiBookEntity Insert(AiBookEntity data)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Insert)]
|
||||
//[UnitOfWork]
|
||||
//public AiBookEntity Insert(AiBookEntity data)
|
||||
//{
|
||||
// throw new NotImplementedException();
|
||||
//}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Insert)]
|
||||
[UnitOfWork]
|
||||
public void Insert(AiBookData data)
|
||||
public AiBookData Insert(AiBookData data)
|
||||
{
|
||||
AiBookEntity entity = repository.DetachedEntities.Where(x => x.Title == data.AiBook.Title).FirstOrDefault();
|
||||
if (entity != null)
|
||||
@@ -60,17 +121,36 @@ namespace CloudBuilder.AI.Service
|
||||
throw new ValidatedException("记录已存在.");
|
||||
}
|
||||
|
||||
ISecurityGeneratorNumberService securityGeneratorNumberService = service.ServiceProvider.GetService<ISecurityGeneratorNumberService>()!;
|
||||
|
||||
data.AiBook.Guid = securityGeneratorNumberService.GetNo(AIPrefixPolicy.AI_BOOK, AIPrefixPolicy.GUID, AIPrefixPolicy.AI_BOOK_PREFIX, YesNoPolicy.NO, AIPrefixPolicy.AI_BOOK_GUID_FORMAT);
|
||||
|
||||
repository.InsertNow(data.AiBook);
|
||||
|
||||
IRepository<AiChapterEntity> repositoryAiChapterEntity = repository.GetRepository<IRepository<AiChapterEntity>>();
|
||||
repositoryAiChapterEntity.InsertNow(data.AiChapters);
|
||||
if (data.AiChapters != null && data.AiChapters.Length > 0)
|
||||
repositoryAiChapterEntity.InsertNow(data.AiChapters);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Update)]
|
||||
[UnitOfWork]
|
||||
public AiBookEntity Update(AiBookEntity data)
|
||||
public AiBookData Update(AiBookData data)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
AiBookEntity aiBook = repository.DetachedEntities.Where(x => x.Guid == data.AiBook.Guid).FirstOrDefault();
|
||||
if (aiBook == null)
|
||||
{
|
||||
throw new ValidatedException("记录不存在.");
|
||||
}
|
||||
|
||||
ValidateHelper.Validate(service, data.AiBook, AiBookEntity.DB_NAME_AI_BOOK);
|
||||
|
||||
ObjectCopyHelper.Copy(data.AiBook, aiBook);
|
||||
|
||||
repository.UpdateNow(aiBook);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -82,6 +162,95 @@ namespace CloudBuilder.AI.Service
|
||||
if (ent != null) { repository.DeleteNow(ent); }
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Delete)]
|
||||
[UnitOfWork]
|
||||
public void Deletes(string[] keys)
|
||||
{
|
||||
foreach (string key in keys)
|
||||
{
|
||||
Delete(key);
|
||||
}
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Update)]
|
||||
[UnitOfWork]
|
||||
public AiBookData ProcessBook(string key, string encoding, string pattern)
|
||||
{
|
||||
AiBookData data = FindByKey(key);
|
||||
|
||||
ChapterSplitter chapterSplitter = new ChapterSplitter();
|
||||
ParagraphSplitter paragraphSplitter = new ParagraphSplitter();
|
||||
|
||||
IRepository<DmsFileEntity> repositoryDmsFile = repository.GetRepository<IRepository<DmsFileEntity>>();
|
||||
|
||||
DmsFileEntity entity = repositoryDmsFile.DetachedEntities.Where(x => x.FileId == data.AiBook.FileId && x.CreatedBy == service.UserId).FirstOrDefault()!;
|
||||
|
||||
if (entity == null) throw new ValidatedException("文件不存在.");
|
||||
|
||||
var fileExtension = Path.GetExtension(entity.OrderKey);//获取文件格式,拓展名
|
||||
|
||||
string file = FileTypePolicy.PackFilePath(service, entity.CreatedBy, entity.OrderKey);
|
||||
|
||||
if (!File.Exists(file)) throw new ValidatedException("文件不存在.");
|
||||
|
||||
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
|
||||
|
||||
string context = File.ReadAllText(file, Encoding.GetEncoding(encoding));
|
||||
|
||||
List<AiChapterEntity> aiChapterEntities = chapterSplitter.SplitNovelIntoChapters(context, pattern);
|
||||
|
||||
if (aiChapterEntities == null || aiChapterEntities.Count() == 0) return data;
|
||||
|
||||
aiChapterEntities.ToLookup(x => x.BookGuid = data.AiBook.Guid);
|
||||
aiChapterEntities.ToLookup(x => x.Status = ChapterStatusPolicy.PROCESS);
|
||||
|
||||
data.AiChapters = aiChapterEntities.ToArray();
|
||||
|
||||
paragraphSplitter.PackParagraphs(data);
|
||||
|
||||
IRepository<AiChapterEntity> repositoryAiChapterEntity = repository.GetRepository<IRepository<AiChapterEntity>>();
|
||||
IRepository<AiParagraphEntity> repositoryAiParagraphEntity = repository.GetRepository<IRepository<AiParagraphEntity>>();
|
||||
|
||||
IRepository<AiSentenceEntity> repositoryAiSentenceEntity = repository.GetRepository<IRepository<AiSentenceEntity>>();
|
||||
|
||||
AiChapterEntity[] aiChapters = repositoryAiChapterEntity.DetachedEntities.Where(x => x.BookGuid == data.AiBook.Guid).ToArray();
|
||||
|
||||
if (aiChapters != null && aiChapters.Length > 0)
|
||||
{
|
||||
foreach (AiChapterEntity aiChapter in aiChapters)
|
||||
{
|
||||
AiParagraphEntity[] aiParagraphs = repositoryAiParagraphEntity.DetachedEntities.Where(x => x.ChapterGuid == aiChapter.Guid).ToArray();
|
||||
|
||||
if (aiParagraphs != null && aiParagraphs.Length > 0)
|
||||
{
|
||||
foreach (AiParagraphEntity aiParagraph in aiParagraphs)
|
||||
{
|
||||
AiSentenceEntity[] aiSentences = repositoryAiSentenceEntity.DetachedEntities.Where(x => x.ParagraphGuid == aiParagraph.Guid).ToArray();
|
||||
|
||||
if (aiSentences != null && aiSentences.Length > 0)
|
||||
{
|
||||
repositoryAiSentenceEntity.DeleteNow(aiSentences);
|
||||
}
|
||||
}
|
||||
|
||||
repositoryAiParagraphEntity.DeleteNow(aiParagraphs);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
repositoryAiChapterEntity.DeleteNow(aiChapters);
|
||||
}
|
||||
|
||||
repositoryAiChapterEntity.InsertNow(data.AiChapters);
|
||||
|
||||
if (data.AiParagraphs == null || data.AiParagraphs.Count() == 0) return data;
|
||||
|
||||
repositoryAiParagraphEntity.InsertNow(data.AiParagraphs);
|
||||
|
||||
if (data.AiSentences == null || data.AiSentences.Count() == 0) return data;
|
||||
repositoryAiSentenceEntity.InsertNow(data.AiSentences);
|
||||
|
||||
return FindByKey(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
using CloudBuilder.Core.DatabaseAccessor.Entity;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using CloudBuilder.Core.DatabaseAccessor;
|
||||
using CloudBuilder.AI.Data;
|
||||
using CloudBuilder.AI.Entity;
|
||||
using CloudBuilder.AI.Policy;
|
||||
using CloudBuilder.AI.SearchCriteria;
|
||||
using CloudBuilder.Core.DatabaseAccessor;
|
||||
using CloudBuilder.Core.DatabaseAccessor.Entity;
|
||||
using CloudBuilder.Core.Service;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
namespace CloudBuilder.AI.Service
|
||||
{
|
||||
public class AiChapterService : IAiChapterService
|
||||
@@ -17,7 +19,7 @@ namespace CloudBuilder.AI.Service
|
||||
repository = service.GetRepository<IRepository<AiChapterEntity>>();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiChapter, operate: Operate.Find)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiChapterEntity FindByKey(string key)
|
||||
{
|
||||
return repository.DetachedEntities.Where(x => x.Guid == key).FirstOrDefault()!;
|
||||
@@ -34,26 +36,64 @@ namespace CloudBuilder.AI.Service
|
||||
return repository.DetachedEntities.Where(x => x.BookGuid == aiBookEntity.Guid).ToArray();
|
||||
}
|
||||
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiChapter, operate: Operate.Find)]
|
||||
public dynamic FindBySearchCriteria(AiChapterSearchCriteria criteria)
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiChapterResultData FindBySearchCriteria(AiChapterSearchCriteria criteria)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
AiChapterResultData data = new AiChapterResultData();
|
||||
AiChapterEntity[] list = null;
|
||||
|
||||
int count = 0;
|
||||
|
||||
string sqlWhere = null;
|
||||
|
||||
if (criteria.Filter != null && criteria.Filter.Length > 0)
|
||||
{
|
||||
sqlWhere = SearchFilter.ComposeWhereClause(criteria.Filter);
|
||||
}
|
||||
|
||||
AiChapterEntity entity = AiChapterEntity.GetInstance();
|
||||
string sql = entity.GetSelectTopFrom(criteria.limit, criteria.page, criteria.orderby.StringToDbField(), criteria.orderbytag, sqlWhere);
|
||||
|
||||
string err = null;
|
||||
try
|
||||
{
|
||||
list = repository.FromSql(sql).ToArray();
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
err = ex.Message;
|
||||
}
|
||||
|
||||
|
||||
if (list != null && list.Length > 0)
|
||||
{
|
||||
sql = entity.GetSelectCountFrom(sqlWhere);
|
||||
count = (int)repository.ExecuteScalar(sql);
|
||||
}
|
||||
|
||||
data.Limit = criteria.limit;
|
||||
data.Page = criteria.page;
|
||||
data.Datas = list.OrderBy(x=>x.ChapterIndex).ToArray();
|
||||
data.Total = count;
|
||||
//data.Sql = sql;
|
||||
data.ErrorMessage = err;
|
||||
return data;
|
||||
}
|
||||
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiChapter, operate: Operate.Print)]
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Print)]
|
||||
public dynamic PrintBySearchCriteria(AiChapterSearchCriteria criteria)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiChapter, operate: Operate.Insert)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Insert)]
|
||||
[UnitOfWork]
|
||||
public AiChapterEntity Insert(AiChapterEntity data)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiChapter, operate: Operate.Update)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Update)]
|
||||
[UnitOfWork]
|
||||
public AiChapterEntity Update(AiChapterEntity data)
|
||||
{
|
||||
@@ -61,7 +101,7 @@ namespace CloudBuilder.AI.Service
|
||||
}
|
||||
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiChapter, operate: Operate.Delete)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Delete)]
|
||||
[UnitOfWork]
|
||||
public void Delete(string key)
|
||||
{
|
||||
|
||||
@@ -21,16 +21,25 @@ namespace CloudBuilder.AI.Service
|
||||
repository = service.GetRepository<IRepository<AiSentenceEntity>>();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiSentence, operate: Operate.Find)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiSentenceEntity FindByKey(string key)
|
||||
{
|
||||
return repository.DetachedEntities.Where(x => x.Guid == key).FirstOrDefault()!;
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiSentence, operate: Operate.Find)]
|
||||
public AiSentenceViewEntityResultData FindBySearchCriteria(AiSentenceSearchCriteria criteria)
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiSentenceViewEntity[] FindByChapterGuid(string chapterGuid)
|
||||
{
|
||||
AiSentenceViewEntityResultData data = new AiSentenceViewEntityResultData();
|
||||
IRepository<AiSentenceViewEntity> repositoryAiSentenceViewEntity = repository.GetRepository<IRepository<AiSentenceViewEntity>>();
|
||||
|
||||
return repositoryAiSentenceViewEntity.DetachedEntities.Where(x => x.ChapterGuid == chapterGuid).OrderBy(x => x.ParagraphIndex).ThenBy(x=>x.SentenceIndex).ToArray();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Find)]
|
||||
public AiSentenceViewResultData FindBySearchCriteria(AiSentenceSearchCriteria criteria)
|
||||
{
|
||||
AiSentenceViewResultData data = new AiSentenceViewResultData();
|
||||
AiSentenceViewEntity[] list = null;
|
||||
IRepository<AiSentenceViewEntity> repositoryAiSentenceViewEntity = repository.GetRepository<IRepository<AiSentenceViewEntity>>();
|
||||
|
||||
@@ -72,13 +81,13 @@ namespace CloudBuilder.AI.Service
|
||||
return data;
|
||||
}
|
||||
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiSentence, operate: Operate.Print)]
|
||||
//[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Print)]
|
||||
public dynamic PrintBySearchCriteria(AiSentenceSearchCriteria criteria)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiSentence, operate: Operate.Insert)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Insert)]
|
||||
[UnitOfWork]
|
||||
public AiSentenceEntity Insert(AiSentenceEntity data)
|
||||
{
|
||||
@@ -92,7 +101,7 @@ namespace CloudBuilder.AI.Service
|
||||
repository.InsertNow(datas);
|
||||
}
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiSentence, operate: Operate.Update)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Update)]
|
||||
[UnitOfWork]
|
||||
public AiSentenceEntity Update(AiSentenceEntity data)
|
||||
{
|
||||
@@ -100,11 +109,11 @@ namespace CloudBuilder.AI.Service
|
||||
}
|
||||
|
||||
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiSentence, operate: Operate.Delete)]
|
||||
[PermissionOperate(name: AIPermissionPolicy.AiBook, operate: Operate.Delete)]
|
||||
[UnitOfWork]
|
||||
public void Delete(string key)
|
||||
{
|
||||
var ent= repository.DetachedEntities.Where(x => x.Guid == key).FirstOrDefault()!;
|
||||
var ent = repository.DetachedEntities.Where(x => x.Guid == key).FirstOrDefault()!;
|
||||
if (ent != null) { repository.DeleteNow(ent); }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,12 +6,6 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Utility\**" />
|
||||
<EmbeddedResource Remove="Utility\**" />
|
||||
<None Remove="Utility\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="8.0.0" />
|
||||
|
||||
Reference in new issue
Block a user