You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
593 lines
15 KiB
593 lines
15 KiB
import 'package:dio/dio.dart';
|
|
import 'dio_manager.dart';
|
|
import 'nw_method.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
class Api {
|
|
static String _normalizeTemplateLanguageTag(String value) {
|
|
final normalized = value.trim().replaceAll('_', '-');
|
|
if (normalized.isEmpty) {
|
|
return 'en-US';
|
|
}
|
|
final parts = normalized.split('-').where((e) => e.isNotEmpty).toList();
|
|
if (parts.isEmpty) {
|
|
return 'en-US';
|
|
}
|
|
if (parts.length == 1) {
|
|
return parts.first.toLowerCase();
|
|
}
|
|
return '${parts[0].toLowerCase()}-${parts[1].toUpperCase()}';
|
|
}
|
|
|
|
static String _currentTemplateLanguageParam() {
|
|
final locale = Get.locale ?? Get.deviceLocale;
|
|
final languageCode = locale?.languageCode.toLowerCase();
|
|
if (languageCode == null || languageCode.isEmpty) {
|
|
return 'en-US';
|
|
}
|
|
|
|
final countryCode = locale?.countryCode?.toUpperCase();
|
|
if (countryCode != null && countryCode.isNotEmpty) {
|
|
return '$languageCode-$countryCode';
|
|
}
|
|
|
|
switch (languageCode) {
|
|
case 'zh':
|
|
return 'zh-CN';
|
|
case 'en':
|
|
return 'en-US';
|
|
case 'ja':
|
|
return 'ja-JP';
|
|
case 'ko':
|
|
return 'ko-KR';
|
|
case 'fr':
|
|
return 'fr-FR';
|
|
case 'de':
|
|
return 'de-DE';
|
|
case 'es':
|
|
return 'es-ES';
|
|
case 'it':
|
|
return 'it-IT';
|
|
case 'pt':
|
|
return 'pt-BR';
|
|
case 'ru':
|
|
return 'ru-RU';
|
|
case 'ar':
|
|
return 'ar-SA';
|
|
case 'hi':
|
|
return 'hi-IN';
|
|
default:
|
|
return 'en-US';
|
|
}
|
|
}
|
|
|
|
// ===== 记忆中心(拾忆)=====
|
|
// 路径规律:/api/home/<模块>_<方法小写>,由 gateway 的 /api/:param1/:param2 接住
|
|
// (param1 就是服务名 home),服务端 memory 模块靠反射注册,两边都不用改路由表。
|
|
|
|
/// 拉取记忆项:start_date / end_date / categories / states / tz / page / size
|
|
static memoryList([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_list',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 当天事项 + 待确认报告标记:date / tz
|
|
static memoryToday([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_today',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 新增:{item: {...}},item.client_key 非空时服务端做幂等
|
|
static memoryAdd([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_add',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 修改:{id, item, fields},服务端自动置 user_edited
|
|
static memoryUpdate([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_update',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 删除:{ids: [...]}
|
|
static memoryDel([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_del',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 标记完成/退回:{ids: [...], done: bool}
|
|
static memoryComplete([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_complete',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 未来 N 天待提醒项(重复项已由服务端展开成绝对时刻):days / tz
|
|
static memoryUpcoming([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_upcoming',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 统计:start_date / end_date / categories
|
|
static memoryStats([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_stats',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 取周报/月报;period_type 与 period_key 都不传 = 最近一份未确认的
|
|
static memoryGetReport([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_getreport',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 确认报告:{report_id}
|
|
static memoryConfirmReport([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_confirmreport',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 历史报告列表:period_type / page / size
|
|
static memoryListReports([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/memory_listreports',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 登录
|
|
static login([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_sgin',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 获取验证码
|
|
static getCode([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_verification',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static tokenlogin([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getinfo',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 获取阿里token
|
|
static getAliToken([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/auth_alitoken',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//更新用户设置
|
|
static updateUserSetting([dynamic params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_setting',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//注销账号
|
|
static deleteUser([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_del',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//用户反馈
|
|
static feedback([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_feedback',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//app配置
|
|
static getappconfig([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getappconfig',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//app获取设备信息
|
|
static getproduct([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getproduct',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//app获取设备信息
|
|
static getproducts([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getproducts',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//举报AI内容
|
|
static reportAiContent([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_reportaicontent',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//获取音乐连接
|
|
static getMusicUrl([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/music_getmusicurl',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 上传会议助手操作记录
|
|
static putOperationRecord([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_putrecords',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 获取会议助手数据
|
|
static getOperationAllRecord([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_getallrecords',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 轮询多条会议助手转写结果
|
|
static getMultitermRecord([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_getrecords',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//获取渠道包信息
|
|
static getChannelApp([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getchannelapp',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//获取所有渠道包信息
|
|
//params 需带 version(本机版本号):游客登录入口是否显示由服务端按这个版本判定,
|
|
//不传等于「认不出是哪一版」,后台若限定了生效版本会一律隐藏入口。
|
|
static getChannelApps([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getchannelapps',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//绑定设备
|
|
static binddevice([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_binddevice',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//解绑定设备
|
|
static unbinddevice([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_unbinddevice',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 获取验证码
|
|
static getdevices([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getdevices',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//绑定设备
|
|
static bindauthcode([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_bindauthcode',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//创建支付订单
|
|
static paycreateorder([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/pay_createorder',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//询问订单
|
|
static payverifyorder([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/pay_verifyorder',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//获取模版数据
|
|
static getEchomeetTemplates([dynamic params, String? language]) {
|
|
final resolvedLanguage = _normalizeTemplateLanguageTag(
|
|
language ?? _currentTemplateLanguageParam());
|
|
final Map<String, dynamic> data = {};
|
|
if (params is Map) {
|
|
data.addAll(Map<String, dynamic>.from(params));
|
|
}
|
|
data['language'] = resolvedLanguage;
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_gettemplates',
|
|
params: data,
|
|
);
|
|
}
|
|
|
|
//申请 MCP 会话令牌(短时效,放进百炼会话的 biz_params 透传给 MCP 工具)
|
|
static getMcpToken() {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getmcptoken',
|
|
params: {},
|
|
);
|
|
}
|
|
|
|
//添加模版数据
|
|
static addEchomeetTemplates([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_addtemplate',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//修改模版数据
|
|
static updateEchomeetTemplates([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_updatetemplate',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//删除模版数据
|
|
static delEchomeetTemplates([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_deltemplate',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
//获取商品列表
|
|
static getGoods([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/pay_getgoodss',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
/// 资源使用/用量上报接口(`/api/home/user_usages`)
|
|
///
|
|
/// 用途:上报翻译(Translation)和会议(Meet)的用量,服务端据此统计并回传最新余额/积分。
|
|
///
|
|
/// 当前在 Dart 侧的使用场景:
|
|
/// - 会议助手 ASR:`UsageStatsService._reportMeetingUsageToServer`
|
|
/// - 翻译/同传 ASR:`UsageStatsService._reportAsrUsageToServer`
|
|
///
|
|
/// 参数(`params`)结构:
|
|
/// - `usagetype`:`int` 类型,使用场景类型(对应 `UsageType.toInt`),目前仅使用:
|
|
/// - `1`:翻译(Translation)
|
|
/// - `2`:会议(Meet)
|
|
/// - `usages`:`Map<String, int>`,各项指标的键值对,例如:
|
|
/// - `MEETING_ASR_AUDIO_SECONDS`:会议识别音频时长(秒)
|
|
/// - `TRANSLATION_MODE_{mode}`:某翻译模式下累计有效识别秒数
|
|
/// - `TRANSLATION_ASR_LANGUAGE_{language}`:某语言/语言对下的调用次数
|
|
///
|
|
/// 返回:
|
|
/// - 经过 `AuthInterceptor` 处理后,本方法返回值即为服务端响应体中的 `data` 字段。
|
|
/// - 若上报成功,`data['usages']` 为 `Map<String, int>`,内部各键的含义与积分/余额更新规则由服务端约定。
|
|
///
|
|
/// 使用示例(Dart):
|
|
/// ```dart
|
|
/// final params = {
|
|
/// 'usagetype': UsageType.Meet.toInt,
|
|
/// 'usages': {
|
|
/// 'MEETING_ASR_AUDIO_SECONDS': 120,
|
|
/// }
|
|
/// };
|
|
/// final data = await Api.usagesResPoints(params);
|
|
/// final usages = (data['usages'] as Map?)?.cast<String, dynamic>();
|
|
/// ```
|
|
static usagesResPoints([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_usages',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static getwakeupvoices([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getwakeupvoices',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static addRecordEchomeet([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_addrecord',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static upRecordEchomeet([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_uprecord',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static startTaskEchomeet([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_starttask',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static refreshTaskEchomeet([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_summary',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static readRecordEchomeet([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_readrecord',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static delRecordEchomeet([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_delrecords',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
static modifyRecordEchomeet([params]) {
|
|
Map data = {
|
|
'title': 'NULL',
|
|
'address': 'NULL',
|
|
'personnel': 'NULL',
|
|
'translate': 'NULL',
|
|
'summary': 'NULL',
|
|
};
|
|
data.addAll(params);
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/echomeet_modifyrecords',
|
|
params: data,
|
|
);
|
|
}
|
|
|
|
// 实名认证:提交姓名 + 身份证号,由服务端调阿里云/腾讯云做二要素核验。
|
|
// 身份证号只用于这一次核验,服务端不落全文(只存掩码 + 加盐指纹)。
|
|
static userIdVerify([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_idverify',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 查询本账号的实名状态
|
|
static userGetIdVerify([params]) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getidverify',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 申请文件上传地址:服务端签发阿里云 OSS 预签名 PUT URL,客户端拿着它直传。
|
|
//
|
|
// 对象存储的长期密钥因此不必下发到客户端(旧的腾讯云 COS 那套是把
|
|
// SecretId/SecretKey 明文发给每个用户的)。object key 由服务端按会话里的
|
|
// uid 拼死,客户端只能给 scene(用途白名单)和文件名里的扩展名。
|
|
static getUploadUrl(params) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_getuploadurl',
|
|
params: params,
|
|
);
|
|
}
|
|
|
|
// 实时机器翻译:服务端代调后台「第三方服务配置」里启用的 MT 服务。
|
|
// 云账号凭据因此不必下发到客户端。
|
|
//
|
|
// [cancelToken] 供同传/面对面的**中间结果**翻译使用:说话过程中会连着发好几次,
|
|
// 后一次发出时要把前一次撤掉,别让废弃的预览请求占着链路和服务商配额。
|
|
static userTranslate(params, {CancelToken? cancelToken}) {
|
|
return DioManager().request(
|
|
NWMethod.post,
|
|
'/api/home/user_translate',
|
|
params: params,
|
|
cancelToken: cancelToken,
|
|
);
|
|
}
|
|
}
|
|
|