1. (聚合推文)修复原创默认出图方式设置默认值 2. (聚合推文)优化出图显示 3. (聚合推文)添加图片上传功能,包括主图和选图区域 4. (聚合推文)新增图片缓存区,上传缓存图片(主图和选图区的图片),可以直接在当前小说所有的批次中的分镜中调用(下载到主图和选图区) 5. (聚合推文)添加一键修脸开关 6. (聚合推文)原创添加一键锁定 7. (聚合推文)新增小说批次任务显示当前所属小说 8. (聚合推文)小说批次任务状态显示优化 9. (聚合推文)优化后台任务状态显示 10. (聚合推文)原创,反推 一键生图 修复
206 lines
6.9 KiB
TypeScript
206 lines
6.9 KiB
TypeScript
import { BookType, OperateBookType, TagDefineType } from '../../../define/enum/bookEnum'
|
||
import { errorMessage, successMessage } from '../../Public/generalTools'
|
||
import { BookService } from '../../../define/db/service/Book/bookService'
|
||
import path from 'path'
|
||
import { CheckFileOrDirExist, CheckFolderExistsOrCreate, CopyFileOrFolder, DeleteFolderAllFile, GetSubdirectories } from '../../../define/Tools/file'
|
||
import { GeneralResponse } from '../../../model/generalResponse'
|
||
import { BookServiceBasic } from '../ServiceBasic/bookServiceBasic'
|
||
import { BookTask } from './bookTask'
|
||
import fs from 'fs'
|
||
import { Book } from '../../../model/book/book'
|
||
|
||
export class BookBasic {
|
||
bookServiceBasic: BookServiceBasic
|
||
bookTask: BookTask
|
||
constructor() {
|
||
this.bookServiceBasic = new BookServiceBasic();
|
||
this.bookTask = new BookTask()
|
||
}
|
||
|
||
//#region 小说相关操作
|
||
/**
|
||
* 新增或者是修小说数据
|
||
* @param {*} book 小说信息
|
||
* @returns
|
||
*/
|
||
async AddOrModifyBook(book) {
|
||
try {
|
||
if (book == null) {
|
||
return errorMessage('小说数据为空,无法修改')
|
||
}
|
||
// 处理一下数据,处理文件地址(删除前缀,转换为默认地址)
|
||
// 当前的小说的名字是不是在数据库中以存在
|
||
let _bookService = await BookService.getInstance()
|
||
let res = await _bookService.AddOrModifyBook(book)
|
||
return res
|
||
} catch (error) {
|
||
return errorMessage(
|
||
'修改数据错误,错误信息如下:' + error.toString(),
|
||
'BookBasic_AddOrModifyBook'
|
||
)
|
||
}
|
||
}
|
||
|
||
// 小说类型返回
|
||
GetBookType() {
|
||
return successMessage(
|
||
[
|
||
{
|
||
label: 'SD反推',
|
||
value: BookType.SD_REVERSE
|
||
},
|
||
{
|
||
label: 'MJ反推',
|
||
value: BookType.MJ_REVERSE
|
||
},
|
||
{
|
||
label: '原创',
|
||
value: BookType.ORIGINAL
|
||
}
|
||
],
|
||
'获取小说类型成功'
|
||
)
|
||
}
|
||
|
||
//#endregion
|
||
|
||
//#region 小说批次基础操作
|
||
|
||
/**
|
||
* 通过小说ID和小说批次任务ID获取小说和小说批次任务数据
|
||
* @param bookId 小说ID
|
||
* @param bookTaskName 小说批次的名字,或者是小说批次任务的ID
|
||
* @returns
|
||
*/
|
||
async GetBookAndTask(bookId: string, bookTaskName: string) {
|
||
let book = await this.bookServiceBasic.GetBookDataById(bookId)
|
||
// 获取小说对应的批次任务数据,默认初始化为第一个
|
||
let condition = {
|
||
bookId: bookId
|
||
} as Book.QueryBookBackTaskCondition
|
||
if (bookTaskName == "output_00001") {
|
||
condition["name"] = bookTaskName
|
||
} else {
|
||
condition["id"] = bookTaskName
|
||
}
|
||
let bookTaskRes = await this.bookServiceBasic.GetBookTaskData(condition)
|
||
return { book: book as Book.SelectBook, bookTask: bookTaskRes.bookTasks[0] as Book.SelectBookTask }
|
||
}
|
||
|
||
//#endregion
|
||
|
||
|
||
//#region 小说相关操作
|
||
|
||
/**
|
||
* 重置小说数据
|
||
* @param bookId 小说ID
|
||
* @returns
|
||
*/
|
||
async ResetBookData(bookId: string): Promise<GeneralResponse.ErrorItem | GeneralResponse.SuccessItem> {
|
||
try {
|
||
let book = await this.bookServiceBasic.GetBookDataById(bookId)
|
||
// 获取所有的小说批次
|
||
let bookTasks = (await this.bookServiceBasic.GetBookTaskData({
|
||
bookId: bookId
|
||
})).bookTasks;
|
||
// 重置批次任务
|
||
for (let i = 0; i < bookTasks.length; i++) {
|
||
const element = bookTasks[i];
|
||
// 第一个重置,后面的删除
|
||
if (i == 0) {
|
||
let resetBookTaskData = await this.bookTask.ReSetBookTask(element.id);
|
||
if (resetBookTaskData.code == 0) {
|
||
throw new Error(resetBookTaskData.message)
|
||
}
|
||
} else {
|
||
let deleteBookTaskData = await this.bookTask.DeleteBookTask(element.id);
|
||
if (deleteBookTaskData.code == 0) {
|
||
throw new Error(deleteBookTaskData.message)
|
||
}
|
||
}
|
||
}
|
||
|
||
// 开始重置小说数据
|
||
await this.bookServiceBasic.UpdateBookData(bookId, {
|
||
srtPath: undefined,
|
||
audioPath: undefined,
|
||
subtitlePosition: undefined,
|
||
imageStyle: undefined,
|
||
autoAnalyzeCharacter: undefined,
|
||
customizeImageStyle: undefined,
|
||
videoConfig: undefined,
|
||
prefixPrompt: undefined,
|
||
suffixPrompt: undefined,
|
||
draftSrtStyle: undefined,
|
||
backgroundMusic: undefined,
|
||
friendlyReminder: undefined,
|
||
watermarkPosition: undefined,
|
||
})
|
||
// 文件重置,获取data下面的所有的子文件夹,删除所有的文件夹
|
||
let bookData = path.join(book.bookFolderPath, 'data');
|
||
if (await CheckFileOrDirExist(bookData)) {
|
||
let dirs = await GetSubdirectories(bookData)
|
||
for (let i = 0; i < dirs.length; i++) {
|
||
const element = dirs[i];
|
||
await DeleteFolderAllFile(element, true)
|
||
}
|
||
}
|
||
let scriptPath = path.join(book.bookFolderPath, 'script')
|
||
if (await CheckFileOrDirExist(scriptPath)) {
|
||
await DeleteFolderAllFile(scriptPath, true)
|
||
}
|
||
// 删掉输入的备份文件和input文件
|
||
let bakPath = path.join(book.bookFolderPath, 'tmp/bak');
|
||
if (await CheckFileOrDirExist(bakPath)) {
|
||
await DeleteFolderAllFile(bakPath, true)
|
||
}
|
||
let inputPath = path.join(book.bookFolderPath, 'tmp/input');
|
||
if (await CheckFileOrDirExist(inputPath)) {
|
||
await DeleteFolderAllFile(inputPath, true)
|
||
}
|
||
|
||
// 重置完毕,开始返回
|
||
return successMessage('重置小说数据成功', 'BookBasic_ResetBookData');
|
||
} catch (error) {
|
||
return errorMessage('重置小说数据失败,失败信息如下:' + error.message, 'BookBasic_ResetBookData');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除指定小说数据
|
||
* @param bookId 要删除的小说ID
|
||
*/
|
||
async DeleteBookData(bookId: string): Promise<GeneralResponse.ErrorItem | GeneralResponse.SuccessItem> {
|
||
try {
|
||
let book = await this.bookServiceBasic.GetBookDataById(bookId);
|
||
// 先将所有的数据重置
|
||
let resetRes = await this.ResetBookData(bookId);
|
||
if (resetRes.code == 0) {
|
||
throw new Error(resetRes.message)
|
||
}
|
||
let bookTasks = (await this.bookServiceBasic.GetBookTaskData({
|
||
bookId: bookId
|
||
})).bookTasks;
|
||
// 删除遗留重置的小说批次任务
|
||
for (let i = 0; i < bookTasks.length; i++) {
|
||
const element = bookTasks[i];
|
||
await this.bookServiceBasic.DeleteBookTaskData(element.id);
|
||
}
|
||
|
||
// 开始删除数据
|
||
await this.bookServiceBasic.DeleteBookData(bookId);
|
||
|
||
// 开始删除文件
|
||
let bookPath = book.bookFolderPath;
|
||
if (await CheckFileOrDirExist(bookPath)) {
|
||
await DeleteFolderAllFile(bookPath, true)
|
||
}
|
||
return successMessage(null, '删除小说数据成功', 'BookBasic_DeleteBookData');
|
||
} catch (error) {
|
||
return errorMessage('删除小说数据失败,失败信息如下:' + error.message, 'BookBasic_DeleteBookData');
|
||
}
|
||
}
|
||
|
||
//#endregion
|
||
} |