diff --git a/lib/data/services/usage_stats_service.dart b/lib/data/services/usage_stats_service.dart index fb0fe792e..a4d573ab2 100644 --- a/lib/data/services/usage_stats_service.dart +++ b/lib/data/services/usage_stats_service.dart @@ -149,11 +149,61 @@ class UsageStatsService extends GetxService { _saveMeetingDaily(daily); Logger.i('MeetingASRrecord', '会议ASR完成: id=${id}, meetingId=${old.meetingId}, transcriptBytes=${transcriptBytes}, audioSeconds=${old.audioSeconds}, date=${dateKey}'); + try { + _reportMeetingUsageToServer( + audioSeconds: old.audioSeconds, + audioBytes: old.fileSizeBytes, + language: old.language, + transcriptBytes: transcriptBytes, + ); + } catch (e) { + Logger.error('会议用量上报(完成)失败: $e'); + } return; } } } + /// 上报会议用量到服务器 + /// [audioSeconds] 音频时长(秒) + /// [audioBytes] 音频文件大小(字节) + /// [language] 识别语言 + /// [transcriptBytes] 转写结果文本字节数(可选) + /// 该方法用于将会议语音识别(ASR)的用量数据上报到服务器。 + /// 它会根据提供的参数构建一个包含会议用量类型、音频时长、音频文件大小、 + /// 识别语言以及可选的转写结果文本字节数的参数对象。 + /// 然后,它会调用API接口将该参数对象发送到服务器进行处理。 + /// 如果上报成功,服务器会返回一个响应,该方法会根据响应更新本地的用户积分(非总积分)。 + Future _reportMeetingUsageToServer({ + required int audioSeconds, + required int audioBytes, + required String language, + int? transcriptBytes, + }) async { + try { + final params = { + 'usagetype': UsageType.Meet.toInt, + 'usages': { + 'MEETING_ASR_AUDIO_SECONDS': audioSeconds, + // 'MEETING_ASR_AUDIO_BYTES': audioBytes, + // if (transcriptBytes != null) + // 'MEETING_ASR_TRANSCRIPT_BYTES': transcriptBytes, + // 'MEETING_ASR_LANGUAGE_$language': 1, + }, + }; + + Logger.info('lxm---MEET用量上报参数: $params'); + + final response = await Api.usagesResPoints(params); + + Logger.info('lxm---MEET用量上报响应: $response'); + + _applyUsageResponse(response); + } catch (e) { + Logger.error('会议用量上报失败: $e'); + } + } + /// 记录翻译API调用 void recordTranslationApiCall({ required String sourceText, @@ -291,6 +341,13 @@ class UsageStatsService extends GetxService { } /// 上报ASR用量到服务器 + /// [effectiveDurationSeconds] 有效语音时长(秒) + /// [language] 识别语言 + /// [mode] 翻译模式 + /// 该方法用于将ASR(语音识别)的用量数据上报到服务器。 + /// 它会根据提供的参数构建一个包含用量类型、有效语音时长、识别语言以及翻译模式的参数对象。 + /// 然后,它会调用API接口将该参数对象发送到服务器进行处理。 + /// 如果上报成功,服务器会返回一个响应,该方法会根据响应更新本地的用户积分(非总积分)。 Future _reportAsrUsageToServer({ required int effectiveDurationSeconds, //required int totalDurationSeconds, @@ -305,10 +362,10 @@ class UsageStatsService extends GetxService { //'TRANSLATION_ASR_TOTAL_SECONDS': totalDurationSeconds, 'TRANSLATION_MODE_$mode': effectiveDurationSeconds, 'TRANSLATION_ASR_LANGUAGE_$language': 1, - 'TRANSLATION_SOURCE_CHARACTERS': - realtimeTranslationStats.value.sourceTextCharacters, - 'TRANSLATION_TARGET_CHARACTERS': - realtimeTranslationStats.value.ttsTextCharacters, + // 'TRANSLATION_SOURCE_CHARACTERS': + // realtimeTranslationStats.value.sourceTextCharacters, + // 'TRANSLATION_TARGET_CHARACTERS': + // realtimeTranslationStats.value.ttsTextCharacters, }, }; diff --git a/lib/data/services/volcano_translation_service.dart b/lib/data/services/volcano_translation_service.dart index 093f58a4b..1ce33d71a 100644 --- a/lib/data/services/volcano_translation_service.dart +++ b/lib/data/services/volcano_translation_service.dart @@ -165,7 +165,12 @@ class VolcanoTranslationService extends GetxService { }; } - // 翻译文本 + // 文本翻译 + /// [text] 待翻译的文本 + /// [sourceLanguageCode] 源语言的ASR代码 + /// [targetLanguageCode] 目标语言的ASR代码 + /// [return] 翻译后的文本 + /// 计费标准:每月200万字符免费,超出部分按49元/百万字符计费 Future translateText({ required String text, required String sourceLanguageCode, @@ -417,6 +422,10 @@ class VolcanoTranslationService extends GetxService { } /// 图片翻译(整图识别+回贴翻译) + /// [imageBytes] 待翻译的图片二进制数据 + /// [targetLanguageCode] 目标语言的ASR代码 + /// [return] 翻译结果 + /// 计费标准:每月100张免费,超出部分按0.04元/张计费 Future translateImage({ required Uint8List imageBytes, required String targetLanguageCode, // ASR代码,如 zh-CN / en-US