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.
105 lines
2.8 KiB
105 lines
2.8 KiB
import 'package:get/get.dart';
|
|
import 'package:get_storage/get_storage.dart';
|
|
|
|
import 'meeting_task_service.dart';
|
|
import 'meeting_task_service2.dart';
|
|
|
|
/// 会议助手任务服务聚合器(统一列表与状态)
|
|
class MeetingTaskAggregator extends GetxService {
|
|
final GetStorage _storage = GetStorage();
|
|
|
|
final MeetingTaskService s1 = Get.find<MeetingTaskService>();
|
|
final MeetingTaskService2 s2 = Get.find<MeetingTaskService2>();
|
|
|
|
RxList taskFinishList = [].obs;
|
|
RxInt tasktype = 1.obs;
|
|
int meetingId = 0;
|
|
List textList = [];
|
|
|
|
Worker? _w1;
|
|
Worker? _w2;
|
|
Worker? _wTasktype;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
_w1 = ever(s1.taskFinishList, (_) => _rebuild());
|
|
_w2 = ever(s2.taskFinishList, (_) => _rebuild());
|
|
_rebuild();
|
|
}
|
|
|
|
void setMeeting(int id) {
|
|
meetingId = id;
|
|
final String svc =
|
|
(_storage.read("meeting_service_type_$id") ?? '').toString();
|
|
final bool isFast = svc == 'fast';
|
|
_wTasktype?.dispose();
|
|
if (isFast) {
|
|
_wTasktype = ever(s2.tasktype, (value) {
|
|
tasktype.value = value;
|
|
if (value == 2) {
|
|
textList = s2.textList;
|
|
}
|
|
});
|
|
} else {
|
|
_wTasktype = ever(s1.tasktype, (value) {
|
|
tasktype.value = value;
|
|
if (value == 2) {
|
|
textList = s1.textList;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
void clearMeeting() {
|
|
meetingId = 0;
|
|
_wTasktype?.dispose();
|
|
_wTasktype = null;
|
|
}
|
|
|
|
void _rebuild() {
|
|
final Set<int> ids = {};
|
|
for (var e in s1.taskFinishList) {
|
|
if (e is Map && e['id'] is int) ids.add(e['id'] as int);
|
|
}
|
|
for (var e in s2.taskFinishList) {
|
|
if (e is Map && e['id'] is int) ids.add(e['id'] as int);
|
|
}
|
|
final List unified = [];
|
|
for (final id in ids) {
|
|
final String svc =
|
|
(_storage.read("meeting_service_type_$id") ?? '').toString();
|
|
final Map a = s1.taskFinishList.firstWhere(
|
|
(x) => x['id'] == id,
|
|
orElse: () => {},
|
|
);
|
|
final Map b = s2.taskFinishList.firstWhere(
|
|
(x) => x['id'] == id,
|
|
orElse: () => {},
|
|
);
|
|
int va = a.isNotEmpty ? ((a['tasktype'] ?? 0) as int) : -999;
|
|
int vb = b.isNotEmpty ? ((b['tasktype'] ?? 0) as int) : -999;
|
|
int v;
|
|
if (svc == 'fast') {
|
|
if (va != -999 && vb != -999) {
|
|
v = va >= vb ? va : vb;
|
|
} else {
|
|
v = vb != -999 ? vb : va;
|
|
}
|
|
} else if (svc == 'standard') {
|
|
if (va != -999 && vb != -999) {
|
|
v = va >= vb ? va : vb;
|
|
} else {
|
|
v = va != -999 ? va : vb;
|
|
}
|
|
} else {
|
|
if (va == -999 && vb == -999) {
|
|
continue;
|
|
}
|
|
v = va == -999 ? vb : (vb == -999 ? va : (va >= vb ? va : vb));
|
|
}
|
|
unified.add({'id': id, 'tasktype': v});
|
|
}
|
|
taskFinishList.value = unified;
|
|
}
|
|
}
|
|
|