| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import 'package:electronic_assistant/base/app_base_request.dart';
- import 'package:electronic_assistant/data/api/atmob_api.dart';
- import 'package:electronic_assistant/data/api/response/talk_query_response.dart';
- import 'package:electronic_assistant/data/bean/talks.dart';
- import 'package:electronic_assistant/data/repositories/agenda_repository.dart';
- import 'package:electronic_assistant/data/repositories/talk_repository.dart';
- import 'package:electronic_assistant/utils/async_util.dart';
- import 'package:electronic_assistant/utils/cancel_future.dart';
- import 'package:flutter/cupertino.dart';
- import '../../dialog/analyse_status_dialog.dart';
- import '../../module/talk/view.dart';
- import '../../utils/http_handler.dart';
- import '../api/request/talk_query_request.dart';
- import '../api/response/tasks_running_response.dart';
- import '../consts/error_code.dart';
- class TaskRepository {
- final Set<String> electronicTasks = {};
- final Set<String> _recordSuccessTalkIds = {};
- CancelableFuture? _taskStatusCheckFuture;
- TaskRepository._();
- void stopTask() {
- _taskStatusCheckFuture?.cancel();
- }
- void addTask(String taskId) {
- electronicTasks.add(taskId);
- _startTaskStatusCheck();
- }
- void startUnfinishedTask() {
- debugPrint('开始获取未完成任务==');
- AsyncUtil.retryWithExponentialBackoff(() => _tasksRunning(), 10, (error) {
- if (error is ServerErrorException) {
- return error.code != ErrorCode.errorCodeNoLogin;
- }
- return true;
- }).then((data) {
- List<String>? list = data.taskIds;
- debugPrint('获取未完成任务成功-${list?.length}');
- electronicTasks.clear();
- if (list != null) {
- electronicTasks.addAll(list);
- }
- _startTaskStatusCheck();
- }).catchError((error) {
- debugPrint('获取未完成任务失败');
- });
- }
- void _startTaskStatusCheck() {
- if (electronicTasks.isEmpty) {
- return;
- }
- debugPrint('开始检查任务状态');
- if (_taskStatusCheckFuture != null) {
- _taskStatusCheckFuture?.cancel();
- }
- _taskStatusCheckFuture = AsyncUtil.retryWhen(
- () => _checkAllTaskStatusFinished(), 0, const Duration(seconds: 3),
- (error) {
- if (error is ServerErrorException) {
- return error.code != ErrorCode.errorCodeNoLogin;
- }
- return true;
- });
- }
- Future<void> _checkAllTaskStatusFinished() {
- String taskIds = electronicTasks.join(',');
- return atmobApi
- .talkQuery(TalkQueryRequest(taskIds))
- .then(HttpHandler.handle(true))
- .then((response) => _dealTaskStatus(response))
- .then((data) {
- if (electronicTasks.isEmpty) {
- return;
- } else {
- throw Exception('task not finished');
- }
- });
- }
- Future<void> _dealTaskStatus(TalkQueryResponse response) {
- response.talks?.forEach((element) {
- if (element.status.value == TalkStatus.analysing ||
- element.status.value == TalkStatus.waitAnalysis) {
- talkRepository.renovateTalkData(element);
- } else if (element.status.value == TalkStatus.analysisSuccess ||
- element.status.value == TalkStatus.analysisFail) {
- electronicTasks.remove(element.taskId);
- if (!_recordSuccessTalkIds.contains(element.id)) {
- _recordSuccessTalkIds.add(element.id);
- _notifyGenerationStatus(element);
- }
- }
- });
- return Future.value();
- }
- void _notifyGenerationStatus(TalkBean element) {
- talkRepository.renovateTalkData(element);
- if (element.status.value == TalkStatus.analysisSuccess) {
- debugPrint('生成成功-${element.id}');
- showAnalyseSuccessDialog(onViewClick: () {
- TalkPage.start(element);
- });
- agendaRepository.requestHomeAgendaData();
- } else if (element.status.value == TalkStatus.analysisFail) {
- debugPrint('生成失败-${element.id}');
- // ToastUtil.showToast('生成失败');
- }
- }
- Future<TasksRunningResponse> _tasksRunning() {
- return atmobApi
- .tasksRunning(AppBaseRequest())
- .then(HttpHandler.handle(true));
- }
- }
- final taskRepository = TaskRepository._();
|