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'; import 'meeting_task_service2.dart'; class SummaryTaskService extends GetxService { final _taskService = Get.find(); final _taskService2 = Get.find(); 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 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) { final ai = DeapsoundAIService(); String summaryText = ''; String overviewText = ''; var summaryDone = false; var overviewDone = false; var summarySuccess = false; var overviewSuccess = false; void tryFinish() { if (summaryDone && overviewDone) { if (summarySuccess && overviewSuccess && summaryText.isNotEmpty && overviewText.isNotEmpty) { _aiServiceValue(id, summaryText, overviewText); } else { _isTask = false; _executeTask(); } } } final summaryStream = ai.sendMessageStream(messages: [ {'role': 'system', 'content': prompt}, {'role': 'user', 'content': text}, ]).timeout(const Duration(seconds: 120)); final overviewStream = ai.sendMessageStream(messages: [ {'role': 'system', 'content': outline}, {'role': 'user', 'content': text}, ]).timeout(const Duration(seconds: 120)); summaryStream.listen((chunk) { summaryText += chunk; }, onError: (error) { summaryDone = true; summarySuccess = false; tryFinish(); }, onDone: () { summaryDone = true; summarySuccess = true; tryFinish(); }, cancelOnError: true); overviewStream.listen((chunk) { overviewText += chunk; }, onError: (error) { overviewDone = true; overviewSuccess = false; tryFinish(); }, onDone: () { overviewDone = true; overviewSuccess = true; tryFinish(); }, cancelOnError: true); } Future _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, }); // 更新 V1 Service 状态 if (id == _taskService.meetingId) { summary = summaryText; overview = overviewText; _taskService.tasktype.value = 3; } // 更新 V2 Service 状态 if (id == _taskService2.meetingId) { summary = summaryText; overview = overviewText; _taskService2.summary = summaryText; _taskService2.overview = overviewText; _taskService2.tasktype.value = 3; } // 更新 V1 任务完成列表 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); // 更新 V2 任务完成列表 Map taskFinishData2 = _taskService2.taskFinishList.firstWhere( (element) => element['id'] == id, orElse: () => {}, ); if (taskFinishData2.isNotEmpty) { taskFinishData2['tasktype'] = 3; _taskService2.taskFinishList.refresh(); } _storage.write("meeting_task_finish_list_v2", _taskService2.taskFinishList); _taskList.removeWhere((element) => element['id'] == id); _storage.write("summary_task_list", _taskList); _isTask = false; _executeTask(); Logger.debug("总结任务完成"); } }