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.

378 lines
11 KiB

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '/core/utils/logger.dart';
import 'database_helper.dart';
class SqfliteApi {
// 获取个人信息
static Future getUser() async {
final db = await DatabaseHelper().database;
List userList = await db.query('user');
return userList.first;
}
// 修改个人信息
static Future editUser(id, Map<String, Object?> user) async {
final db = await DatabaseHelper().database;
await db.update('user', user, where: 'id = ?', whereArgs: [id]);
}
// 获取商务会议助手列表
static Future getMeetingList() async {
final db = await DatabaseHelper().database;
return await db.query(
'meeting',
orderBy: 'creationtime DESC',
);
}
// 获取商务会议助手详情
static Future getMeetingDetails(id) async {
final db = await DatabaseHelper().database;
List meetingList =
await db.query('meeting', where: 'id = ?', whereArgs: [id]);
List detailsList = await db.query(
'meetingdetails',
where: 'meetingid = ?',
whereArgs: [id],
);
return <String, dynamic>{
...meetingList.first,
'taskid': detailsList.first['taskid'],
'details': detailsList.first
};
}
// 获取商务会议助手转写内容
static Future getMeetingSpeaker(id) async {
final db = await DatabaseHelper().database;
return await db.query(
'meetingspeaker',
where: 'meetingid = ?',
whereArgs: [id],
);
}
// 插入商务会议助手
static Future insertMeeting(Map<String, Object?> meeting) async {
final db = await DatabaseHelper().database;
try {
await db.transaction((txn) async {
await txn.insert('meeting', meeting);
await txn.insert('meetingdetails', {
'meetingid': meeting['id'],
'address': '',
'personnel': '',
'taskid': '',
'tasktype': 0,
'overview': '',
'summary': '',
'mindmap': '',
});
});
return true;
} catch (e) {
Get.snackbar(
'error'.tr, // 错误
'unknownError'.tr,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
return;
}
}
// 修改商务会议助手详情内容
static Future editMeeting(id, Map<String, Object?> meeting) async {
final db = await DatabaseHelper().database;
try {
await db.update(
'meetingdetails',
meeting,
where: 'meetingid = ?',
whereArgs: [id],
);
return true;
} catch (e) {
Get.snackbar(
'error'.tr, // 错误
'unknownError'.tr,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
return;
}
}
// 插入商务会议助手转写内容
static Future insertMeetingSpeaker(List<Map<String, Object?>> data) async {
final db = await DatabaseHelper().database;
try {
final batch = db.batch();
for (var item in data) {
batch.insert('meetingspeaker', item);
}
await batch.commit();
return true;
} catch (e) {
Get.snackbar(
'error'.tr, // 错误
'unknownError'.tr,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
return;
}
}
// 修改商务会议助手转写内容
static Future editMeetingSpeaker(List data) async {
final db = await DatabaseHelper().database;
try {
final batch = db.batch();
for (var item in data) {
Map<String, Object?> values = item['content'] != null
? {'content': item['content']}
: {'speaker': item['speaker']};
batch.update(
'meetingspeaker',
values,
where: 'id = ?',
whereArgs: [item['id']],
);
}
await batch.commit();
return true;
} catch (e) {
Get.snackbar(
'error'.tr, // 错误
'unknownError'.tr,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
return;
}
}
// 删除商务会议助手转写内容
static Future deleteMeetingSpeaker(id) async {
final db = await DatabaseHelper().database;
await db.delete('meetingspeaker', where: 'meetingid = ?', whereArgs: [id]);
}
// 修改商务会议助手标题
static Future editMeetingTitle(id, Map<String, Object?> meeting) async {
final db = await DatabaseHelper().database;
await db.update('meeting', meeting, where: 'id = ?', whereArgs: [id]);
}
// 删除商务会议助手
static Future deleteMeeting(id) async {
final db = await DatabaseHelper().database;
await db.transaction((txn) async {
await txn.delete('meeting', where: 'id = ?', whereArgs: [id]);
await txn
.delete('meetingdetails', where: 'meetingid = ?', whereArgs: [id]);
await txn
.delete('meetingspeaker', where: 'meetingid = ?', whereArgs: [id]);
});
}
static String _getMeetingTemplateLanguageCode() {
final locale = Get.locale ?? Get.deviceLocale;
if (locale == null) {
return 'en-US';
}
final code = locale.languageCode.toLowerCase();
switch (code) {
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';
}
}
// 获取商务会议助手Ask AI列表
static Future getMeetingAiList(int id) async {
final db = await DatabaseHelper().database;
return await db.query(
'meetingai',
where: 'meetingid = ?',
whereArgs: [id],
orderBy: 'id DESC',
);
}
// 插入商务会议助手Ask AI
static Future insertMeetingAi(Map<String, Object?> meeting) async {
final db = await DatabaseHelper().database;
await db.insert('meetingai', meeting);
}
// 初始化模版
static Future initMeetingTemplate(List data) async {
final db = await DatabaseHelper().database;
await db.transaction((txn) async {
// 清空旧数据
await txn.delete('meetingtemplate');
await txn.delete('meetingcategorytemplate');
List categoryList = [];
for (var i = 0; i < data.length; i++) {
Map item = data[i];
Map? result = categoryList.firstWhere(
(category) => category['name'] == item['ttype'],
orElse: () => null,
);
Map template = {
"id": item['id'],
'tid': item['tid'],
'name': item['title'],
'icon': item['icon'],
'tag': item['tags'] ?? '',
'desc': item['description'],
'outline': item['outline'],
'prompt': item['template'],
'language': item['language'],
};
if (result != null) {
result['templates'].add(template);
} else {
categoryList.add({
'name': item['ttype'],
'templates': [template],
'language': item['language'],
});
}
}
final int customIndex =
categoryList.indexWhere((e) => e['name'] == '自定义');
if (customIndex != -1) {
final customCategory = categoryList.removeAt(customIndex);
categoryList.add(customCategory);
} else {
categoryList.add({
'name': 'custom'.tr,
'templates': [],
});
}
for (var i = 0; i < categoryList.length; i++) {
Map item = categoryList[i];
int categoryId = i + 1;
await txn.insert('meetingcategorytemplate', {
'id': categoryId,
'name': item['name'],
'language': item['language'],
});
for (var j = 0; j < item['templates'].length; j++) {
Map template = item['templates'][j];
await txn.insert('meetingtemplate', {
"id": template['id'],
'tid': template['tid'],
'categoryid': categoryId,
'name': template['name'],
'icon': template['icon'],
'tag': template['tag'],
'desc': template['desc'],
'outline': template['outline'],
'prompt': template['prompt'],
'language': template['language'],
});
}
}
});
}
// 获取商务会议助手所有分类模版列表
static Future getMeetingCategoryTemplateList() async {
final language = _getMeetingTemplateLanguageCode();
Logger.info('language: $language');
final db = await DatabaseHelper().database;
List categorytemplateList = await db.query(
'meetingcategorytemplate',
where: '(language = ? OR language IS NULL OR language = "")',
whereArgs: [language],
);
Logger.info('categorytemplateList: $categorytemplateList');
final dataList =
categorytemplateList.map((item) => Map.from(item)).toList();
for (var element in dataList) {
final List templateList = await db.query(
'meetingtemplate',
limit: 4,
where: 'categoryid = ? ',
whereArgs: [element['id']],
orderBy: 'id ${element['name'] == '自定义' ? 'DESC' : 'ASC'}',
);
element['template'] = templateList
.map((item) => {
...Map.from(item),
'tag': item['tag'].isNotEmpty ? item['tag'].split(',') : [],
})
.toList();
}
return dataList;
}
// 获取商务会议助手模版列表
static Future getMeetingTemplateList(int id, {bool isCustom = false}) async {
final language = _getMeetingTemplateLanguageCode();
Logger.info('language: $language');
final db = await DatabaseHelper().database;
return await db.query(
'meetingtemplate',
where: 'categoryid = ? AND language = ?',
whereArgs: [id, language],
orderBy: 'id ${isCustom ? 'DESC' : 'ASC'}',
);
}
// 插入商务会议助手模版
static Future insertMeetingTemplate(Map<String, Object?> meeting) async {
final db = await DatabaseHelper().database;
await db.insert('meetingtemplate', meeting);
}
// 修改商务会议助手模版
static Future editMeetingTemplate(id, Map<String, Object?> meeting) async {
final db = await DatabaseHelper().database;
await db
.update('meetingtemplate', meeting, where: 'id = ?', whereArgs: [id]);
}
// 删除商务会议助手模版
static Future deleteMeetingTemplate(id) async {
final db = await DatabaseHelper().database;
await db.delete('meetingtemplate', where: 'id = ?', whereArgs: [id]);
}
}