From f037c9de304ef637d06cc43cd4dc682a1bf024fa Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Thu, 10 Jul 2025 21:03:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BC=9A=E8=AE=AE=E5=8A=A9?= =?UTF-8?q?=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meeting/meeting_task_service.dart | 111 +++++++++++------- .../meeting_details_controller.dart | 2 + lib/modules/meeting/views/meeting_view.dart | 47 ++++---- 3 files changed, 97 insertions(+), 63 deletions(-) diff --git a/lib/data/services/meeting/meeting_task_service.dart b/lib/data/services/meeting/meeting_task_service.dart index aac40b62e..225ad28cd 100644 --- a/lib/data/services/meeting/meeting_task_service.dart +++ b/lib/data/services/meeting/meeting_task_service.dart @@ -16,10 +16,10 @@ class MeetingTaskService extends GetxService { MeetingUploadService get _uploadService => Get.find(); - RxList taskList = [].obs; + List _taskList = []; + RxList taskFinishList = [].obs; bool _isTask = false; - int _handled = 0; String _systemPrompt = ''; String _userId = ''; @@ -30,8 +30,12 @@ class MeetingTaskService extends GetxService { final String _serviceUrl = 'https://openspeech.bytedance.com/api/v1/auc'; Map _headers = {}; - RxList textList = [].obs; + int meetingId = 0; + RxInt tasktype = 1.obs; + List textList = []; String allText = ''; + String summary = ''; + String overview = ''; @override void onInit() { @@ -51,7 +55,8 @@ class MeetingTaskService extends GetxService { } void _getTaskList() { - taskList.value = _storage.read("meeting_task_list") ?? []; + _taskList = _storage.read("meeting_task_list") ?? []; + taskFinishList.value = _storage.read("meeting_task_finish_list") ?? []; _executeTask(); } @@ -78,49 +83,48 @@ class MeetingTaskService extends GetxService { taskId = await _submitTask(audiourl); } await SqfliteApi.editMeeting(id, {'tasktype': 1, 'taskid': taskId}); - taskList.add({ + _taskList.add({ 'id': id, 'taskid': taskId, 'tasktype': 1, }); - _storage.write("meeting_task_list", taskList); + taskFinishList.add({ + 'id': id, + 'tasktype': 1, + }); + _storage.write("meeting_task_list", _taskList); + _storage.write("meeting_task_finish_list", taskFinishList); _executeTask(); } void _executeTask() async { if (_isTask) return; _isTask = true; - _handled = 0; - while (_handled < taskList.length) { + while (_taskList.isNotEmpty) { await Future.delayed(const Duration(seconds: 2)); - int completed = 0; - for (var element in taskList) { - if (element['tasktype'] == 1) { - await _fileRecognize(element); - } else { - completed++; - } + for (var element in List.from(_taskList)) { + await _fileRecognize(element); } - _handled = completed; } _isTask = false; } void removeTask(int id, {bool isDeleteTask = false}) { - Map taskData = taskList.firstWhere( + Map taskFinishData = taskFinishList.firstWhere( (element) => element['id'] == id, orElse: () => {}, ); - if (taskData.isNotEmpty) { - if (isDeleteTask || taskData['tasktype'] >= 3) { - taskList.remove(taskData); - _storage.write("meeting_task_list", taskList); - if (taskList.isEmpty) { - _handled = 0; - } + if (taskFinishData.isNotEmpty) { + if (isDeleteTask || taskFinishData['tasktype'] >= 3) { + taskFinishList.remove(taskFinishData); + _storage.write("meeting_task_finish_list", taskFinishList); } } + if (isDeleteTask) { + _taskList.removeWhere((element) => element['id'] == id); + _storage.write("meeting_task_list", _taskList); + } } Future _submitTask(String audiourl) async { @@ -203,7 +207,7 @@ class MeetingTaskService extends GetxService { var code = respDic['resp']['code'] as int; if (code == 1000) { - await _addTextList(item, respDic['resp']['utterances']); + await _addTextList(item['id'], respDic['resp']['utterances']); return; } else if (code < 2000) { Logger.debug("FileRecognize failed"); @@ -214,7 +218,7 @@ class MeetingTaskService extends GetxService { } } - Future _addTextList(Map item, List utterances) async { + Future _addTextList(int id, List utterances) async { String text = ''; String personnel = ''; List> list = []; @@ -228,7 +232,7 @@ class MeetingTaskService extends GetxService { } } list.add({ - 'meetingid': item['id'], + 'meetingid': id, 'content': element['text'], 'starttime': element['start_time'], 'endtime': element['end_time'], @@ -239,22 +243,36 @@ class MeetingTaskService extends GetxService { var result = await SqfliteApi.insertMeetingSpeaker(list); if (result != null) { await SqfliteApi.editMeeting( - item['id'], + id, {'tasktype': 2, 'personnel': personnel}, ); - List speakerList = await SqfliteApi.getMeetingSpeaker(item['id']); - textList.value = List.from(speakerList); + List speakerList = await SqfliteApi.getMeetingSpeaker(id); + List newSpeakerList = List.from(speakerList); Synchrodata.saveOperationRecord('update', { - 'original': jsonEncode(textList), - 'id': item['id'], + 'original': jsonEncode(newSpeakerList), + 'id': id, }); - item['tasktype'] = 2; + if (id == meetingId) { + textList = newSpeakerList; + tasktype.value = 2; + } + _taskList.removeWhere((element) => element['id'] == id); + Map taskFinishData = taskFinishList.firstWhere( + (element) => element['id'] == id, + orElse: () => {}, + ); + if (taskFinishData.isNotEmpty) { + taskFinishData['tasktype'] = 2; + taskFinishList.refresh(); + } + _storage.write("meeting_task_list", _taskList); + _storage.write("meeting_task_finish_list", taskFinishList); } allText = text; - _aiServiceMessage(item); + _aiServiceMessage(id); } - void _aiServiceMessage(Map item) { + void _aiServiceMessage(int id) { int awaitQuantity = 0; String summaryText = ''; String overviewText = ''; @@ -271,7 +289,7 @@ class MeetingTaskService extends GetxService { awaitQuantity++; summaryText = value; if (awaitQuantity >= 2) { - _aiServiceValue(item, summaryText, overviewText); + _aiServiceValue(id, summaryText, overviewText); } }); DeapsoundAIService().sendMessage( @@ -286,17 +304,30 @@ class MeetingTaskService extends GetxService { awaitQuantity++; overviewText = value; if (awaitQuantity >= 2) { - _aiServiceValue(item, summaryText, overviewText); + _aiServiceValue(id, summaryText, overviewText); } }); } - void _aiServiceValue(Map item, String summaryText, String overviewText) { - SqfliteApi.editMeeting(item['id'], { + void _aiServiceValue(int id, String summaryText, String overviewText) { + SqfliteApi.editMeeting(id, { 'tasktype': 3, 'summary': summaryText, 'overview': overviewText, }); - item['tasktype'] = 3; + if (id == meetingId) { + summary = summaryText; + overview = overviewText; + tasktype.value = 3; + } + Map taskFinishData = taskFinishList.firstWhere( + (element) => element['id'] == id, + orElse: () => {}, + ); + if (taskFinishData.isNotEmpty) { + taskFinishData['tasktype'] = 3; + taskFinishList.refresh(); + } + _storage.write("meeting_task_finish_list", taskFinishList); } } diff --git a/lib/modules/meeting/controllers/meeting_details_controller.dart b/lib/modules/meeting/controllers/meeting_details_controller.dart index 3b731eff6..c3f3e75df 100644 --- a/lib/modules/meeting/controllers/meeting_details_controller.dart +++ b/lib/modules/meeting/controllers/meeting_details_controller.dart @@ -78,6 +78,7 @@ class MeetingDetailsController extends GetxController ..duration = const Duration(seconds: 2); final Map args = Get.arguments ?? {}; id = args['id']; + _meetingTaskService.meetingId = id; _getDataDetails(); _loadJS(); } @@ -95,6 +96,7 @@ class MeetingDetailsController extends GetxController void popInvokedWithResult(didPop, result) async { _meetingUploadService.removeUpload(id); _meetingTaskService.removeTask(id); + _meetingTaskService.meetingId = 0; } void _getDataDetails() async { diff --git a/lib/modules/meeting/views/meeting_view.dart b/lib/modules/meeting/views/meeting_view.dart index 338b06993..e34ffbaf6 100644 --- a/lib/modules/meeting/views/meeting_view.dart +++ b/lib/modules/meeting/views/meeting_view.dart @@ -544,7 +544,6 @@ class MeetingView extends GetView { ), ), Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: EdgeInsets.symmetric(horizontal: 5.w, vertical: 2.w), @@ -561,6 +560,7 @@ class MeetingView extends GetView { ), ), ), + const Spacer(), Obx(() { Map uploadData = controller.meetingUploadService.uploadList.firstWhere( @@ -602,28 +602,29 @@ class MeetingView extends GetView { ) : const SizedBox(); }), - if (data.tasktype == 1) - Padding( - padding: EdgeInsets.only(top: 5.w), - child: Text( - '正在生成...', - style: TextStyle( - color: Colors.blue, - fontSize: 10.sp, - ), - ), - ), - if (data.tasktype == 2) - Padding( - padding: EdgeInsets.only(top: 5.w), - child: Text( - '已生成', - style: TextStyle( - color: Colors.blue, - fontSize: 10.sp, - ), - ), - ), + Obx(() { + Map taskData = + controller.meetingTaskService.taskFinishList.firstWhere( + (element) => element['id'] == data.id, + orElse: () => {}, + ); + return taskData.isNotEmpty + ? Padding( + padding: EdgeInsets.only(top: 5.w), + child: Text( + taskData['tasktype'] == 1 + ? '正在转写...' + : taskData['tasktype'] == 2 + ? '正在总结...' + : '总结完成', + style: TextStyle( + color: Colors.blue, + fontSize: 10.sp, + ), + ), + ) + : const SizedBox(); + }), ], ), ],