You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.2 KiB
123 lines
3.2 KiB
import 'package:get/get.dart';
|
|
import 'package:get_storage/get_storage.dart';
|
|
|
|
import '../../../core/utils/logger.dart';
|
|
import '../db/sqflite_api.dart';
|
|
import '../deapsound_ai_service.dart';
|
|
import 'meeting_task_service.dart';
|
|
|
|
class SummaryTaskService extends GetxService {
|
|
final _taskService = Get.find<MeetingTaskService>();
|
|
|
|
final GetStorage _storage = GetStorage();
|
|
|
|
List _taskList = [];
|
|
|
|
bool _isTask = false;
|
|
|
|
String summary = ''; //AI总结内容
|
|
String overview = ''; //AI概览内容
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
_getTaskList();
|
|
}
|
|
|
|
void cancelTask() {
|
|
_taskList.clear();
|
|
_storage.remove("summary_task_list");
|
|
}
|
|
|
|
void _getTaskList() {
|
|
_taskList = _storage.read("summary_task_list") ?? [];
|
|
_executeTask();
|
|
}
|
|
|
|
Future<void> addTaskList(
|
|
int id, String text, String prompt, String outline) async {
|
|
Logger.debug("添加总结任务列表");
|
|
_taskList.add({
|
|
'id': id,
|
|
'text': text,
|
|
'prompt': prompt,
|
|
'outline': outline,
|
|
});
|
|
_storage.write("summary_task_list", _taskList);
|
|
_executeTask();
|
|
}
|
|
|
|
void _executeTask() async {
|
|
if (_taskList.isEmpty) return;
|
|
if (_isTask) return;
|
|
_isTask = true;
|
|
var task = _taskList.first;
|
|
_aiServiceMessage(
|
|
task['id'],
|
|
task['text'],
|
|
task['prompt'],
|
|
task['outline'],
|
|
);
|
|
Logger.debug("执行总结任务列表");
|
|
}
|
|
|
|
void removeTask(int id) {
|
|
_taskList.removeWhere((element) => element['id'] == id);
|
|
_storage.write("summary_task_list", _taskList);
|
|
}
|
|
|
|
Future<void> _aiServiceMessage(
|
|
int id, String text, String prompt, String outline) async {
|
|
final ai = DeapsoundAIService();
|
|
try {
|
|
final results = await Future.wait([
|
|
ai.sendMessage(messages: [
|
|
{'role': 'system', 'content': prompt},
|
|
{'role': 'user', 'content': text},
|
|
]).timeout(const Duration(seconds: 300)),
|
|
ai.sendMessage(messages: [
|
|
{'role': 'system', 'content': outline},
|
|
{'role': 'user', 'content': text},
|
|
]).timeout(const Duration(seconds: 300)),
|
|
], eagerError: true);
|
|
_aiServiceValue(id, results[0], results[1]);
|
|
} catch (e) {
|
|
_isTask = false;
|
|
_executeTask();
|
|
}
|
|
}
|
|
|
|
Future<void> _aiServiceValue(
|
|
int id, String summaryText, String overviewText) async {
|
|
final exists = _taskList.any((item) => item['id'] == id);
|
|
if (!exists) {
|
|
_isTask = false;
|
|
_executeTask();
|
|
return;
|
|
}
|
|
await SqfliteApi.editMeeting(id, {
|
|
'tasktype': 3,
|
|
'summary': summaryText,
|
|
'overview': overviewText,
|
|
});
|
|
if (id == _taskService.meetingId) {
|
|
summary = summaryText;
|
|
overview = overviewText;
|
|
_taskService.tasktype.value = 3;
|
|
}
|
|
Map taskFinishData = _taskService.taskFinishList.firstWhere(
|
|
(element) => element['id'] == id,
|
|
orElse: () => {},
|
|
);
|
|
if (taskFinishData.isNotEmpty) {
|
|
taskFinishData['tasktype'] = 3;
|
|
_taskService.taskFinishList.refresh();
|
|
}
|
|
_storage.write("meeting_task_finish_list", _taskService.taskFinishList);
|
|
_taskList.removeWhere((element) => element['id'] == id);
|
|
_storage.write("summary_task_list", _taskList);
|
|
_isTask = false;
|
|
_executeTask();
|
|
Logger.debug("总结任务完成");
|
|
}
|
|
}
|
|
|