import 'package:autosos_flutter/api/_api_client.dart'; import 'package:autosos_flutter/model/base_response.dart'; import 'package:autosos_flutter/model/misc.dart'; import 'package:autosos_flutter/model/order.dart'; import 'package:autosos_flutter/model/payment.dart'; /// 订单 API(对应 Android AppApiService 中 order/* 相关) class OrderApi { static final OrderApi instance = OrderApi._(); OrderApi._(); final _http = ApiClient.instance.http; // ===== 核单 ===== /// 核单列表 Future>> checkList({int page = 1, int size = 20}) async { final r = await _http.get( '/v2/order/check-list', {'page': page, 'size': size}, ); return BaseResponse.fromJson(r as Map, (d) => (d as List).map((e) => CheckItem.fromJson(e as Map)).toList()); } /// 提交核单 Future> submitCheck({ required int orderId, required String remark, }) async { final r = await _http.post('/v2/order/check', { 'order_id': orderId, 'remark': remark, }); return BaseResponse.fromJson(r as Map, (d) => d as bool); } // ===== 等待接单 ===== /// 当前可接订单列表 Future>> waitingList() async { final r = await _http.get('/v2/order/waiting-list'); return BaseResponse.fromJson(r as Map, (d) => (d as List).map((e) => WaitingOrder.fromJson(e as Map)).toList()); } /// 抢单 Future> grabOrder(int orderId) async { final r = await _http.post('/v2/order/grab', {'order_id': orderId}); return BaseResponse.fromJson(r as Map, (d) => Order.fromJson(d as Map)); } // ===== 救援中 ===== /// 到达现场 Future> arriveScene(int orderId, {double? lat, double? lng}) async { final r = await _http.post('/v2/order/arrive', { 'order_id': orderId, 'lat': lat, 'lng': lng, }); return BaseResponse.fromJson(r as Map, (d) => d as bool); } /// 开始轨迹录制 Future> startTrack(int orderId) async { final r = await _http.post('/v2/order/track/start', {'order_id': orderId}); return BaseResponse.fromJson(r as Map, (d) => d as String); } /// 上传轨迹点 Future> uploadTrackPoints(int orderId, List> points) async { final r = await _http.post('/v2/order/track/points', { 'order_id': orderId, 'points': points, }); return BaseResponse.fromJson(r as Map, (d) => d as bool); } /// 结束轨迹 Future> endTrack(int orderId) async { final r = await _http.post('/v2/order/track/end', {'order_id': orderId}); return BaseResponse.fromJson(r as Map, (d) => d as bool); } // ===== 拍照取证 ===== /// 上传照片(实际通过 QiniuUploadService 走七牛,本接口只是返回 token) Future>> uploadPhotos(int orderId, List localPaths) async { final r = await _http.post('/v2/order/photos', { 'order_id': orderId, 'paths': localPaths, }); return BaseResponse.fromJson(r as Map, (d) => (d as List).cast()); } // ===== 客户签字 ===== /// 上传签名图片 Future> uploadSignature(int orderId, String localPath) async { final r = await _http.post('/v2/order/signature', { 'order_id': orderId, 'path': localPath, }); return BaseResponse.fromJson(r as Map, (d) => d as String); } // ===== 收款 ===== /// 生成支付订单(微信支付) Future> createWxPay(int orderId, double amount) async { final r = await _http.post('/v2/pay/wx', { 'order_id': orderId, 'amount': amount, }); return BaseResponse.fromJson(r as Map, (d) => WxPay.fromJson(d as Map)); } /// 生成收款二维码(技师二维码让客户扫码) Future> createPayQrCode(int orderId, double amount) async { final r = await _http.post('/v2/pay/qrcode', { 'order_id': orderId, 'amount': amount, }); return BaseResponse.fromJson(r as Map, (d) => d as String); } /// 现金收款确认 Future> confirmCashPay(int orderId, double amount) async { final r = await _http.post('/v2/pay/cash', { 'order_id': orderId, 'amount': amount, }); return BaseResponse.fromJson(r as Map, (d) => d as bool); } // ===== 完成 ===== /// 提交完成(带金额明细) Future> completeOrder({ required int orderId, required List amountItems, String? remark, }) async { final r = await _http.post('/v2/order/complete', { 'order_id': orderId, 'amount_items': amountItems.map((e) => e.toJson()).toList(), 'remark': remark, }); return BaseResponse.fromJson(r as Map, (d) => CompleteOrderInfo.fromJson(d as Map)); } // ===== 订单记录 ===== /// 历史订单(已完成 / 已取消) Future>> historyOrders({ int page = 1, int size = 20, String? status, }) async { final r = await _http.get('/v2/order/history', { 'page': page, 'size': size, if (status != null) 'status': status, }); return BaseResponse.fromJson(r as Map, (d) => PageResult.fromJson(d as Map, (e) => Order.fromJson(e as Map))); } /// 订单详情 Future> orderDetail(int orderId) async { final r = await _http.get('/v2/order/detail/$orderId'); return BaseResponse.fromJson(r as Map, (d) => Order.fromJson(d as Map)); } }