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.

103 lines
2.7 KiB

import 'dart:convert';
import 'package:get_storage/get_storage.dart';
import '../../data/services/db/sqflite_api.dart';
import '../../data/services/network/api.dart';
class Synchrodata {
static final GetStorage _storage = GetStorage();
static List _records = _storage.read("operation_records") ?? [];
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({
...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: () => null,
);
if (foundElement != null) {
foundElement.addAll({
...params,
'id': id,
'number': params['id'],
});
} else {
_records.add({
...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 startSynchro() async {
if (_isSynchro) return;
_isSynchro = true;
if (_records.isNotEmpty || _delids.isNotEmpty) {
// 获取需要修改的全部数据
List putRecords = [];
for (var element in _records) {
final result = await SqfliteApi.getMeetingDetails(element['number']);
final speakerList =
await SqfliteApi.getMeetingSpeaker(element['number']);
putRecords.add({
...result,
...result['details'],
'rtype': result['type'],
'original': jsonEncode(speakerList),
...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);
}
}
var result = await Api.getOperationRecord();
_isSynchro = false;
}
}