Browse Source

[new]增加上传

zk 1 year ago
parent
commit
95d069ad4c

+ 10 - 0
lib/data/api/atmob_api.dart

@@ -1,3 +1,6 @@
+import 'dart:convert';
+import 'dart:io';
+
 import 'package:dio/dio.dart';
 import 'package:electronic_assistant/base/app_base_request.dart';
 import 'package:electronic_assistant/base/base_response.dart';
@@ -9,6 +12,7 @@ import 'package:electronic_assistant/data/api/request/chat_history_request.dart'
 import 'package:electronic_assistant/data/api/request/login_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
+import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_generate_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_query_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_rename_request.dart';
@@ -22,6 +26,7 @@ import 'package:electronic_assistant/data/api/response/chat_history_response.dar
 import 'package:electronic_assistant/data/api/response/home_info_response.dart';
 import 'package:electronic_assistant/data/api/response/login_response.dart';
 import 'package:electronic_assistant/data/api/response/talk_check_electric_response.dart';
+import 'package:electronic_assistant/data/api/response/talk_generate_response.dart';
 import 'package:electronic_assistant/data/api/response/talk_info_response.dart';
 import 'package:electronic_assistant/data/api/response/talk_query_response.dart';
 import 'package:electronic_assistant/data/api/response/tasks_running_response.dart';
@@ -111,6 +116,11 @@ abstract class AtmobApi {
   @POST("/project/secretary/v1/talk/query")
   Future<BaseResponse<TalkQueryResponse>> talkQuery(
       @Body() TalkQueryRequest request);
+
+  @MultiPart()
+  @POST("/project/secretary/v1/talk/generate")
+  Future<BaseResponse<TalkGenerateResponse>> uploadTalkFile(
+      @Part() Map<String, dynamic> body);
 }
 
 final atmobApi = AtmobApi(defaultDio, baseUrl: Constants.baseUrl);

+ 30 - 0
lib/data/api/request/talk_file_request.dart

@@ -0,0 +1,30 @@
+import 'dart:io';
+
+import 'package:dio/dio.dart';
+import 'package:electronic_assistant/base/app_base_request.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part 'talk_file_request.g.dart';
+
+@JsonSerializable()
+class TalkFileRequest extends AppBaseRequest {
+  @JsonKey(name: 'id')
+  String id;
+
+  @JsonKey(name: 'duration')
+  double duration;
+
+  @JsonKey(ignore: true)
+  File? file;
+
+  TalkFileRequest(this.id, this.duration, {this.file});
+
+  @override
+  Map<String, dynamic> toJson() {
+    final json = _$TalkFileRequestToJson(this);
+    if (file != null) {
+      json['file'] = MultipartFile.fromFileSync(file!.path);
+    }
+    return json;
+  }
+}

+ 14 - 0
lib/data/api/response/talk_generate_response.dart

@@ -0,0 +1,14 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'talk_generate_response.g.dart';
+
+@JsonSerializable()
+class TalkGenerateResponse {
+  @JsonKey(name: "taskId")
+  String taskId;
+
+  TalkGenerateResponse(this.taskId);
+
+  factory TalkGenerateResponse.fromJson(Map<String, dynamic> json) =>
+      _$TalkGenerateResponseFromJson(json);
+}

+ 14 - 0
lib/data/repositories/talk_repository.dart

@@ -1,6 +1,11 @@
+import 'dart:io';
+
+import 'package:dio/dio.dart';
 import 'package:electronic_assistant/data/api/atmob_api.dart';
 import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
+import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
+import 'package:get/get_state_manager/src/rx_flutter/rx_disposable.dart';
 
 import '../../utils/http_handler.dart';
 import '../api/request/talk_generate_request.dart';
@@ -55,6 +60,15 @@ class TalkRepository {
         .talkCreate(TalkCreateRequest(duration, requestId))
         .then(HttpHandler.handle(true));
   }
+
+  Future<String> uploadTalkFile(String talkId, double duration, File file) {
+    return atmobApi
+        .uploadTalkFile(TalkFileRequest(talkId, duration, file: file).toJson())
+        .then(HttpHandler.handle(true))
+        .then((response) {
+      return response.taskId;
+    });
+  }
 }
 
 final talkRepository = TalkRepository._();

+ 16 - 1
lib/module/talk/controller.dart

@@ -2,11 +2,13 @@ import 'dart:async';
 import 'dart:io';
 
 import 'package:electronic_assistant/base/base_controller.dart';
+import 'package:electronic_assistant/data/repositories/task_repository.dart';
 import 'package:electronic_assistant/module/talk/summary/view.dart';
 import 'package:electronic_assistant/module/talk/todo/view.dart';
 import 'package:electronic_assistant/resource/assets.gen.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
 import 'package:electronic_assistant/resource/string.gen.dart';
+import 'package:electronic_assistant/utils/error_handler.dart';
 import 'package:electronic_assistant/utils/expand.dart';
 import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:flutter/cupertino.dart';
@@ -173,7 +175,20 @@ class TalkController extends BaseController {
   }
 
   void _requestAnalyze(File file) {
-    //提交文件
+    String? talkId = talkBean.value?.id;
+    double? duration = talkBean.value?.duration;
+
+    if (talkId == null || duration == null) {
+      return;
+    }
+    talkRepository.uploadTalkFile(talkId, duration, file).then((taskId) {
+      ToastUtil.showToast('提交成功,小听正在分析谈话,请稍后');
+      talkBean.value?.taskId = taskId;
+      talkBean.value?.status = TalkStatus.analysing;
+      taskRepository.addTask(taskId);
+    }).catchError((error) {
+      ErrorHandler.toastError(error);
+    });
   }
 
   void goElectricStore() {