createOrder static method

创建订单

Implementation

static Future<CreateOrderResponse> createOrder(CreateOrderRequest request) async {
  final url = '${EnvironmentConfig.baseUrl}$_createOrderPath';

  print('');
  print('========== 📤 创建订单请求 ==========');
  print('🔗 请求地址: $url');
  print('📋 订单信息:');
  print('   收货人: ${request.consigneeName}');
  print('   手机号: ${request.consigneeMobile}');
  print('   地址: ${request.consigneeAddress}');
  print('   商品数量: ${request.items.length}');

  try {
    final requestBody = request.toJson();
    final requestBodyStr = json.encode(requestBody);

    if (EnvironmentConfig.enableDebugLog) {
      print('📦 请求体:');
      print(const JsonEncoder.withIndent('  ').convert(requestBody));
    }

    final response = await http.post(
      Uri.parse(url),
      headers: {
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: requestBodyStr,
    ).timeout(
      Duration(seconds: EnvironmentConfig.apiTimeout),
      onTimeout: () {
        throw Exception('请求超时:创建订单响应时间过长');
      },
    );

    print('📥 响应状态码: ${response.statusCode}');

    if (response.statusCode == 200) {
      final Map<String, dynamic> responseData = json.decode(utf8.decode(response.bodyBytes));

      if (EnvironmentConfig.enableDebugLog) {
        print('📦 响应数据:');
        print(const JsonEncoder.withIndent('  ').convert(responseData));
      }

      final result = CreateOrderResponse.fromJson(responseData);

      if (result.success) {
        print('✅ 订单创建成功');
        print('   订单ID: ${result.orderId}');
        print('   订单编号: ${result.orderSn}');
        print('   外部订单号: ${result.outOrderSn}');
        print('   订单金额: \$${result.totalAmount?.toStringAsFixed(2)}');
        print('   商品数量: ${result.totalQuantity}');
      } else {
        print('❌ 订单创建失败: ${result.message}');
      }

      print('=====================================');
      print('');
      return result;
    } else {
      print('❌ 请求失败,状态码: ${response.statusCode}');
      print('   响应内容: ${response.body}');
      print('=====================================');
      print('');

      // 尝试解析错误消息
      try {
        final errorData = json.decode(utf8.decode(response.bodyBytes));
        return CreateOrderResponse(
          success: false,
          message: errorData['message'] as String? ?? '创建订单失败(HTTP ${response.statusCode})',
        );
      } catch (e) {
        return CreateOrderResponse(
          success: false,
          message: '创建订单失败(HTTP ${response.statusCode})',
        );
      }
    }
  } catch (e, stackTrace) {
    print('❌ 创建订单异常: $e');
    if (EnvironmentConfig.enableDebugLog) {
      print('堆栈跟踪: $stackTrace');
    }
    print('=====================================');
    print('');

    return CreateOrderResponse(
      success: false,
      message: '创建订单失败: $e',
    );
  }
}