5 changed files with 148 additions and 76 deletions
@ -0,0 +1,132 @@ |
|||||
|
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); |
||||
|
} |
||||
|
|
||||
|
void _aiServiceMessage(int id, String text, String prompt, String outline) { |
||||
|
int awaitQuantity = 0; |
||||
|
String summaryText = ''; |
||||
|
String overviewText = ''; |
||||
|
DeapsoundAIService().sendMessage( |
||||
|
messages: [ |
||||
|
{ |
||||
|
'role': 'system', |
||||
|
'content': prompt, |
||||
|
}, |
||||
|
{'role': 'user', 'content': text}, |
||||
|
], |
||||
|
).then((value) { |
||||
|
awaitQuantity++; |
||||
|
summaryText = value; |
||||
|
if (awaitQuantity >= 2) { |
||||
|
_aiServiceValue(id, summaryText, overviewText); |
||||
|
} |
||||
|
}); |
||||
|
DeapsoundAIService().sendMessage( |
||||
|
messages: [ |
||||
|
{ |
||||
|
'role': 'system', |
||||
|
'content': outline, |
||||
|
}, |
||||
|
{'role': 'user', 'content': text}, |
||||
|
], |
||||
|
).then((value) { |
||||
|
awaitQuantity++; |
||||
|
overviewText = value; |
||||
|
if (awaitQuantity >= 2) { |
||||
|
_aiServiceValue(id, summaryText, overviewText); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
void _aiServiceValue(int id, String summaryText, String overviewText) { |
||||
|
if (!_taskList.any((item) => item['id'] == id)) return; |
||||
|
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("总结任务完成"); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue