import 'dart:convert'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import '../../data/services/db/database_helper.dart'; import '../../data/services/db/sqflite_api.dart'; import '../../data/services/meeting/meeting_task_service.dart'; import '../../data/services/network/api.dart'; class Synchrodata { static final GetStorage _storage = GetStorage(); static List> _records = (_storage.read("operation_records") as List?) ?.map((e) => Map.from(e as Map)) .toList() ?? []; static List _delids = _storage.read("operation_delids") ?? []; static bool _isSynchro = false; // 保存操作记录 static Future saveOperationRecord( String method, dynamic params, ) async { String userId = ''; Map? userInfo = _storage.read("user_info"); if (userInfo != null) { userId = userInfo['user']['uid']; } String id = '${userId}_${params['id']}'; if (params['type'] != null) { params['rtype'] = params['type']; } switch (method) { case 'insert': _records.add({ ...Map.from(params), 'id': id, 'number': params['id'], 'uid': userId, }); _storage.write("operation_records", _records); break; case 'update': Map? foundElement = _records.firstWhere( (element) => element['id'] == id, orElse: () => {}, ); if (foundElement.isNotEmpty) { foundElement.addAll({ ...Map.from(params), 'id': id, 'number': params['id'], }); } else { _records.add({ ...Map.from(params), 'id': id, 'number': params['id'], 'uid': userId, }); } _storage.write("operation_records", _records); break; case 'delete': _delids.add(id); _storage.write("operation_delids", _delids); break; default: break; } } // 上传操作记录 static Future uploadOperationRecords({bool isSynchro = false}) async { if (_isSynchro) return; _isSynchro = true; // if (_records.isNotEmpty || _delids.isNotEmpty) { // // 获取需要修改的全部数据 // List putRecords = []; // for (var element in _records) { // Map result = {'details': {}}; // List speakerList = []; // if (!_delids.contains(element['id'])) { // result = await SqfliteApi.getMeetingDetails(element['number']); // speakerList = await SqfliteApi.getMeetingSpeaker(element['number']); // } // putRecords.add({ // ...Map.from(result), // ...Map.from(result['details']), // 'rtype': result['type'], // 'original': jsonEncode(speakerList), // ...Map.from(element), // }); // } // var result = await Api.putOperationRecord({ // 'delids': _delids, // 'records': putRecords, // }); // if (result != null) { // _records = []; // _delids = []; // _storage.write("operation_records", _records); // _storage.write("operation_delids", _delids); // } // } if (isSynchro) { await _synchrodata(); } _isSynchro = false; } // 同步数据 static Future _synchrodata() async { var result = await Api.getOperationAllRecord(); List records = result['records'] ?? []; if (records.isEmpty) return; final meetingTaskService = Get.find(); List taskList = []; final db = await DatabaseHelper().database; await db.transaction((txn) async { for (var element in records) { if (element['state'] > 0 && element['state'] < 5) { taskList.add({ 'id': element['id'], 'tasktype': element['state'], }); } final List existList = await txn.query( 'meeting', where: 'id = ?', whereArgs: [element['id']], ); Map meetingData = { 'id': element['id'], 'title': element['title'] ?? '', 'type': element['rtype'] ?? '', 'seconds': element['seconds'] ?? 0, 'audiourl': element['audiourl'] ?? '', 'tasktype': element['state'] ?? 0, 'creationtime': (element['creationtime'] ?? 0) * 1000, }; Map meetingDetailsData = { 'meetingid': element['id'], 'address': element['address'] ?? '', 'personnel': element['personnel'] ?? '', 'taskid': element['taskid'] ?? '', 'tasktype': element['state'] ?? 0, 'overview': element['overview'] ?? '', 'summary': element['summary'] ?? '', 'mindmap': '', }; if (existList.isNotEmpty) { await txn.update( 'meeting', meetingData, where: 'id = ?', whereArgs: [element['id']], ); await txn.update( 'meetingdetails', meetingDetailsData, where: 'meetingid = ?', whereArgs: [element['id']], ); } else { await txn.insert('meeting', { ...meetingData, 'filepath': '', }); await txn.insert('meetingdetails', meetingDetailsData); } if (element['translate'].isNotEmpty) { List speakerList = jsonDecode(element['translate']); await txn.delete( 'meetingspeaker', where: 'meetingid = ?', whereArgs: [element['id']], ); final batch = txn.batch(); for (var item in speakerList) { batch.insert('meetingspeaker', item); } await batch.commit(); } } }); meetingTaskService.startTask(taskList); } }