|
|
|
@ -1,4 +1,5 @@ |
|
|
|
import 'dart:convert'; |
|
|
|
import 'dart:io'; |
|
|
|
|
|
|
|
import 'package:get/get.dart'; |
|
|
|
import 'package:get_storage/get_storage.dart'; |
|
|
|
@ -8,6 +9,8 @@ import '../db/sqflite_api.dart'; |
|
|
|
import '../../../data/models/appconfig.dart'; |
|
|
|
import '../../../core/utils/logger.dart'; |
|
|
|
import '../../../core/utils/synchrodata.dart'; |
|
|
|
import '../usage_stats_service.dart'; |
|
|
|
import '../../../data/models/meeting_usage_stats.dart'; |
|
|
|
import '../deapsound_ai_service.dart'; |
|
|
|
import 'meeting_upload_service.dart'; |
|
|
|
// 移除标准版服务桥接,改为通过聚合器对外暴露统一状态 |
|
|
|
@ -124,11 +127,45 @@ class MeetingTaskService2 extends GetxService { |
|
|
|
String prompt = '', |
|
|
|
String outline = '', |
|
|
|
}) async { |
|
|
|
await SqfliteApi.editMeeting(id, {'tasktype': 1}); |
|
|
|
final String taskId = DateTime.now().millisecondsSinceEpoch.toString(); |
|
|
|
await SqfliteApi.editMeeting(id, {'tasktype': 1, 'taskid': taskId}); |
|
|
|
|
|
|
|
try { |
|
|
|
final detail = await SqfliteApi.getMeetingDetails(id); |
|
|
|
final seconds = (detail['seconds'] ?? 0) as int; |
|
|
|
final filepath = (detail['filepath'] ?? '') as String; |
|
|
|
int fileSizeBytes = 0; |
|
|
|
if (filepath.isNotEmpty) { |
|
|
|
try { |
|
|
|
fileSizeBytes = await File(filepath).length(); |
|
|
|
} catch (_) {} |
|
|
|
} |
|
|
|
final record = MeetingAsrRecord( |
|
|
|
id: taskId, |
|
|
|
meetingId: id, |
|
|
|
taskId: taskId, |
|
|
|
audioSeconds: seconds, |
|
|
|
fileSizeBytes: fileSizeBytes, |
|
|
|
language: language, |
|
|
|
submitTimestamp: DateTime.now().millisecondsSinceEpoch, |
|
|
|
status: asrStatusProcessing, |
|
|
|
transcriptBytes: 0, |
|
|
|
completeTimestamp: 0, |
|
|
|
); |
|
|
|
try { |
|
|
|
final svc = Get.isRegistered<UsageStatsService>() |
|
|
|
? Get.find<UsageStatsService>() |
|
|
|
: Get.put(UsageStatsService(), permanent: true); |
|
|
|
svc.addMeetingAsrRecord(record); |
|
|
|
} catch (e) { |
|
|
|
Logger.w('MeetingASRrecord', '提交用量记录失败: ' + e.toString()); |
|
|
|
} |
|
|
|
} catch (_) {} |
|
|
|
_taskList.add({ |
|
|
|
'id': id, |
|
|
|
'audiourl': audiourl, |
|
|
|
'tasktype': 1, |
|
|
|
'taskid': taskId, |
|
|
|
'template': { |
|
|
|
'isSpeaker': isSpeaker, |
|
|
|
'language': language, |
|
|
|
@ -209,8 +246,10 @@ class MeetingTaskService2 extends GetxService { |
|
|
|
String audiourl, { |
|
|
|
bool enableSpeakerInfo = true, |
|
|
|
String language = '', |
|
|
|
String? requestIdOverride, |
|
|
|
}) async { |
|
|
|
String requestId = DateTime.now().millisecondsSinceEpoch.toString(); |
|
|
|
String requestId = |
|
|
|
requestIdOverride ?? DateTime.now().millisecondsSinceEpoch.toString(); |
|
|
|
|
|
|
|
// 为每次请求生成新的headers - 适配大模型极速版API |
|
|
|
Map<String, String> requestHeaders = { |
|
|
|
@ -323,6 +362,9 @@ class MeetingTaskService2 extends GetxService { |
|
|
|
enableSpeakerInfo: |
|
|
|
(((item['template'] ?? {})['isSpeaker']) ?? false) as bool, |
|
|
|
language: asrLanguage, |
|
|
|
requestIdOverride: (item['taskid'] ?? '').toString().isEmpty |
|
|
|
? null |
|
|
|
: (item['taskid'] ?? '').toString(), |
|
|
|
); |
|
|
|
|
|
|
|
Logger.debug('API 全量响应结构:${respDic.toString()}'); |
|
|
|
@ -813,6 +855,22 @@ class MeetingTaskService2 extends GetxService { |
|
|
|
: (langDesc.isEmpty |
|
|
|
? tplOutline |
|
|
|
: tplOutline + ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。'); |
|
|
|
try { |
|
|
|
final details = await SqfliteApi.getMeetingDetails(id); |
|
|
|
final tid = (details['taskid'] ?? '') as String; |
|
|
|
final transcriptBytes = utf8.encode(summarySourceText).length; |
|
|
|
final svc = Get.isRegistered<UsageStatsService>() |
|
|
|
? Get.find<UsageStatsService>() |
|
|
|
: Get.put(UsageStatsService(), permanent: true); |
|
|
|
svc.completeMeetingAsrRecord( |
|
|
|
id: tid, |
|
|
|
transcriptBytes: transcriptBytes, |
|
|
|
completeTimestamp: DateTime.now().millisecondsSinceEpoch, |
|
|
|
); |
|
|
|
} catch (e) { |
|
|
|
Logger.w('MeetingASRrecord', '完成用量记录失败: ' + e.toString()); |
|
|
|
} |
|
|
|
|
|
|
|
_summaryTaskService.addTaskList( |
|
|
|
id, summarySourceText, promptToUse, outlineToUse); |
|
|
|
} |
|
|
|
|