Browse Source

fix(meeting): 修复任务类型监听逻辑和代码格式化问题

修正meeting_details_controller中任务类型监听逻辑,确保在快速模式下正确处理类型3的任务
调整meeting_task_service2中的代码格式,提高可读性
移除废弃的aiServiceMessage方法及相关代码
weicu
lxm 11 months ago
parent
commit
2f7646ca3a
  1. 172
      lib/data/services/meeting/meeting_task_service2.dart
  2. 4
      lib/modules/meeting/controllers/meeting_details_controller.dart

172
lib/data/services/meeting/meeting_task_service2.dart

@ -851,7 +851,10 @@ class MeetingTaskService2 extends GetxService {
// 使用统一的总结服务生成概览与总结 // 使用统一的总结服务生成概览与总结
final String tplPrompt = ((templateData?['prompt']) ?? '').toString(); final String tplPrompt = ((templateData?['prompt']) ?? '').toString();
final String tplOutline = ((templateData?['outline']) ?? '').toString(); final String tplOutline = ((templateData?['outline']) ?? '').toString();
final String outCode = (((templateData?['targetLanguage']) ?? (templateData?['language']) ?? '') as String).toLowerCase(); final String outCode = (((templateData?['targetLanguage']) ??
(templateData?['language']) ??
'') as String)
.toLowerCase();
String langDesc = ''; String langDesc = '';
if (outCode.startsWith('zh')) { if (outCode.startsWith('zh')) {
langDesc = '中文'; langDesc = '中文';
@ -892,7 +895,8 @@ class MeetingTaskService2 extends GetxService {
: (langDesc.isEmpty : (langDesc.isEmpty
? tplOutline ? tplOutline
: tplOutline + ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。'); : tplOutline + ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。');
_summaryTaskService.addTaskList(id, summarySourceText, promptToUse, outlineToUse); _summaryTaskService.addTaskList(
id, summarySourceText, promptToUse, outlineToUse);
} }
} }
@ -988,168 +992,4 @@ class MeetingTaskService2 extends GetxService {
} catch (_) {} } catch (_) {}
} }
} }
void aiServiceMessage(int id, String text, [Map? templateData]) {
int awaitQuantity = 0;
String summaryText = '';
String overviewText = '';
// 模板参数透传
final bool tplIsSpeaker = ((templateData?['isSpeaker']) ?? false) as bool;
final String tplLanguage = ((templateData?['language']) ?? '').toString();
final String tplOutline = ((templateData?['outline']) ?? '').toString();
final String tplPrompt = ((templateData?['prompt']) ?? '').toString();
final String tplTargetLang =
((templateData?['targetLanguage']) ?? '').toString();
// 构建系统prompt,如果有模板数据则整合模板prompt
String systemPrompt =
'您将扮演一名会议总结专家,拥有超强的信息归纳与细分能力。不仅能高效处理各类通用场景会议,精准提炼会议核心内容,为后续思维导图生成奠定坚实基础。若涉及人员,人员名称保留[]。';
if (templateData != null) {
if (tplPrompt.isNotEmpty) {
systemPrompt += ' 特别要求:' + tplPrompt;
}
if (tplOutline.isNotEmpty) {
systemPrompt += ' 大纲:' + tplOutline;
}
// 当目标语言为空(自动识别)时,使用录音语言作为输出语言约束;否则使用目标语言
final String outCode =
tplTargetLang.isNotEmpty ? tplTargetLang : tplLanguage;
if (outCode.isNotEmpty) {
final String t = outCode.toLowerCase();
String langDesc = '目标语言';
if (t.startsWith('zh')) {
langDesc = '中文';
} else if (t.startsWith('en')) {
langDesc = '英文';
} else if (t.startsWith('ja')) {
langDesc = '日文';
} else if (t.startsWith('ko')) {
langDesc = '韩文';
} else if (t.startsWith('fr')) {
langDesc = '法文';
} else if (t.startsWith('de')) {
langDesc = '德文';
} else if (t.startsWith('es')) {
langDesc = '西班牙文';
} else if (t.startsWith('ru')) {
langDesc = '俄文';
} else if (t.startsWith('it')) {
langDesc = '意大利文';
} else if (t.startsWith('pt')) {
langDesc = '葡萄牙文';
} else if (t.startsWith('hi')) {
langDesc = '印地文';
} else if (t.startsWith('th')) {
langDesc = '泰文';
} else if (t.startsWith('vi')) {
langDesc = '越南文';
}
systemPrompt += ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。';
}
}
DeapsoundAIService().sendMessage(
messages: [
{
'role': 'system',
'content': systemPrompt,
},
{'role': 'user', 'content': text},
],
).then((value) {
awaitQuantity++;
summaryText = value ?? '';
if (awaitQuantity >= 2) {
_aiServiceValue(id, summaryText, overviewText);
}
});
// 构建第二个系统prompt,如果有模板数据则整合模板prompt
String systemPrompt2 = '您将扮演一名会议事件归纳专家,能准确抓住会议中事件的关键点,并每个事件只需一句话精简总结。';
if (templateData != null) {
if (tplPrompt.isNotEmpty) {
systemPrompt2 += ' 特别要求:' + tplPrompt;
}
if (tplOutline.isNotEmpty) {
systemPrompt2 += ' 大纲:' + tplOutline;
}
final String outCode2 =
tplTargetLang.isNotEmpty ? tplTargetLang : tplLanguage;
if (outCode2.isNotEmpty) {
final String t = outCode2.toLowerCase();
String langDesc = '目标语言';
if (t.startsWith('zh')) {
langDesc = '中文';
} else if (t.startsWith('en')) {
langDesc = '英文';
} else if (t.startsWith('ja')) {
langDesc = '日文';
} else if (t.startsWith('ko')) {
langDesc = '韩文';
} else if (t.startsWith('fr')) {
langDesc = '法文';
} else if (t.startsWith('de')) {
langDesc = '德文';
} else if (t.startsWith('es')) {
langDesc = '西班牙文';
} else if (t.startsWith('ru')) {
langDesc = '俄文';
} else if (t.startsWith('it')) {
langDesc = '意大利文';
} else if (t.startsWith('pt')) {
langDesc = '葡萄牙文';
} else if (t.startsWith('hi')) {
langDesc = '印地文';
} else if (t.startsWith('th')) {
langDesc = '泰文';
} else if (t.startsWith('vi')) {
langDesc = '越南文';
}
systemPrompt2 += ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。';
}
}
DeapsoundAIService().sendMessage(
messages: [
{
'role': 'system',
'content': systemPrompt2,
},
{'role': 'user', 'content': text},
],
).then((value) {
awaitQuantity++;
overviewText = value ?? '';
if (awaitQuantity >= 2) {
_aiServiceValue(id, summaryText, overviewText);
}
});
}
void _aiServiceValue(int id, String summaryText, String overviewText) {
SqfliteApi.editMeeting(id, {
'tasktype': 3,
'summary': summaryText,
'overview': overviewText,
});
if (id == meetingId) {
summary = summaryText;
overview = overviewText;
tasktype.value = 3;
}
try {
final s1 = Get.find<MeetingTaskService>();
if (id == s1.meetingId) {
s1.tasktype.value = 3;
}
} catch (_) {}
Map taskFinishData = taskFinishList.firstWhere(
(element) => element['id'] == id,
orElse: () => {},
);
if (taskFinishData.isNotEmpty) {
taskFinishData['tasktype'] = 3;
taskFinishList.refresh();
}
_storage.write("meeting_task_finish_list_v2", taskFinishList);
}
} }

4
lib/modules/meeting/controllers/meeting_details_controller.dart

@ -103,10 +103,10 @@ class MeetingDetailsController extends GetxController
_getDataDetails(); _getDataDetails();
_loadJS(); _loadJS();
_tasktypeListener = ever(_meetingTaskService.tasktype, (value) { _tasktypeListener = ever(_meetingTaskService.tasktype, (value) {
if (isFast) return; if (isFast && value != 3) return;
meetingDetails.value.tasktype = value; meetingDetails.value.tasktype = value;
if (_everType <= value) { if (_everType <= value) {
if (value == 2) { if (!isFast && value == 2) {
textList.value = _meetingTaskService.textList; textList.value = _meetingTaskService.textList;
} else if (value == 3) { } else if (value == 3) {
meetingDetails.value.summary = _summaryTaskService.summary; meetingDetails.value.summary = _summaryTaskService.summary;

Loading…
Cancel
Save