|
|
|
import 'dart:convert';
|
|
|
|
|
|
|
|
import 'package:dio/dio.dart';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
|
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/day_count.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/order_trend.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/vip_counts_info.dart';
|
|
|
|
import 'package:retrofit/retrofit.dart';
|
|
|
|
|
|
|
|
import 'data/base_data.dart';
|
|
|
|
import 'data/business_goods.dart';
|
|
|
|
import 'data/business_order_detail_info.dart';
|
|
|
|
import 'data/business_order_list.dart';
|
|
|
|
import 'data/day_flow_list.dart';
|
|
|
|
import 'data/goods_type_sales_list.dart';
|
|
|
|
import 'data/popular_sales_list.dart';
|
|
|
|
import 'data/product_group_list.dart';
|
|
|
|
import 'data/refund_reason_list.dart';
|
|
|
|
import 'data/single_sales_list.dart';
|
|
|
|
import 'data/trade_summary_list.dart';
|
|
|
|
|
|
|
|
part 'business_api.g.dart';
|
|
|
|
|
|
|
|
///本地
|
|
|
|
const localBaseUrl = "http://admin-api.test.yixinhuixiang.com/";
|
|
|
|
|
|
|
|
///测试
|
|
|
|
// const localBaseUrl = "http://test-merchant.lotus-wallet.com/test-merchant/";
|
|
|
|
|
|
|
|
///线上
|
|
|
|
const serviceBaseUrl = "http://pos.tenant.lotus-wallet.com/test-merchant/";
|
|
|
|
|
|
|
|
@RestApi(baseUrl: localBaseUrl)
|
|
|
|
abstract class BusinessApiService {
|
|
|
|
factory BusinessApiService(
|
|
|
|
Dio dio, {
|
|
|
|
String baseUrl,
|
|
|
|
BuildContext context,
|
|
|
|
String token,
|
|
|
|
bool showLoading = false,
|
|
|
|
String url,
|
|
|
|
String tenant,
|
|
|
|
String storeId,
|
|
|
|
bool showErrorToast = true,
|
|
|
|
}) {
|
|
|
|
Map<String, dynamic> headers =
|
|
|
|
(token == null || token == "") ? {} : {'token': "Bearer $token"};
|
|
|
|
if (tenant != null && tenant != "") {
|
|
|
|
headers["tenant"] = tenant;
|
|
|
|
}
|
|
|
|
if (storeId != null && storeId != "") {
|
|
|
|
headers["store-id"] = storeId;
|
|
|
|
}
|
|
|
|
if (kReleaseMode) baseUrl = serviceBaseUrl;
|
|
|
|
if (url != null) baseUrl = url;
|
|
|
|
dio.options = BaseOptions(
|
|
|
|
connectTimeout: 60000,
|
|
|
|
receiveTimeout: 60000,
|
|
|
|
headers: headers,
|
|
|
|
responseType: ResponseType.json,
|
|
|
|
baseUrl: baseUrl,
|
|
|
|
);
|
|
|
|
dio.interceptors.add(
|
|
|
|
InterceptorsWrapper(onRequest: (RequestOptions options) {
|
|
|
|
debugPrint("\n======================= 请求数据 =======================");
|
|
|
|
debugPrint("method = ${options.method.toString()}");
|
|
|
|
debugPrint("url = ${options.uri.toString()}");
|
|
|
|
debugPrint("headers = ${options.headers}");
|
|
|
|
if (showLoading && !EasyLoading.isShow) {
|
|
|
|
//是否显示loading
|
|
|
|
EasyLoading.show(status: "正在加载...");
|
|
|
|
}
|
|
|
|
if (options.data is FormData) {
|
|
|
|
debugPrint("params data = FormData");
|
|
|
|
} else {
|
|
|
|
debugPrint("params data = ${jsonEncode(options.data)}");
|
|
|
|
}
|
|
|
|
debugPrint("params queryParameters = ${options.queryParameters}");
|
|
|
|
}, onResponse: (Response response) {
|
|
|
|
if (showLoading && EasyLoading.isShow) EasyLoading.dismiss();
|
|
|
|
debugPrint("\n======================= 响应数据开始 =======================");
|
|
|
|
debugPrint("code = ${response.statusCode}");
|
|
|
|
p(jsonEncode(response.data));
|
|
|
|
|
|
|
|
// debugPrint(jsonEncode(response.data), wrapWidth: response.data.toString().length * 10);
|
|
|
|
|
|
|
|
Map map = response.data;
|
|
|
|
// if (map["code"] != 0) {
|
|
|
|
// EasyLoading.dismiss();
|
|
|
|
// }
|
|
|
|
// if (map["code"] == 40005 || map["code"] == 40001) {
|
|
|
|
// if (!LoginTipsDialog().isShow) {
|
|
|
|
// print("show: ${LoginTipsDialog().isShow}");
|
|
|
|
// LoginTipsDialog().show(context);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
if (showErrorToast &&
|
|
|
|
map["code"] == 404 &&
|
|
|
|
(map["msg"] ?? map["message"]) != null) {
|
|
|
|
SmartDialog.showToast(map["msg"] ?? map["message"],
|
|
|
|
alignment: Alignment.center);
|
|
|
|
}
|
|
|
|
debugPrint("======================= 响应数据结束 =======================\n");
|
|
|
|
}, onError: (DioError e) {
|
|
|
|
if (EasyLoading.isShow) EasyLoading.dismiss();
|
|
|
|
// SmartDialog.showToast("网络错误,请切换网络或稍后再试!", alignment: Alignment.center);
|
|
|
|
// SmartDialog.showToast(AppUtils.dioErrorTypeToString(e.type),
|
|
|
|
// alignment: Alignment.center);
|
|
|
|
debugPrint("\n======================= 错误响应数据 =======================");
|
|
|
|
debugPrint("type = ${e.type}");
|
|
|
|
debugPrint("message = ${e.message}");
|
|
|
|
debugPrint("\n");
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
return _BusinessApiService(dio, baseUrl: baseUrl);
|
|
|
|
}
|
|
|
|
|
|
|
|
void dispose();
|
|
|
|
|
|
|
|
static void p(String msg) {
|
|
|
|
//因为String的length是字符数量不是字节数量所以为了防止中文字符过多,
|
|
|
|
// 把4*1024的MAX字节打印长度改为1000字符数
|
|
|
|
int maxStrLength = 900;
|
|
|
|
//大于1000时
|
|
|
|
while (msg.length > maxStrLength) {
|
|
|
|
debugPrint(msg.substring(0, maxStrLength), wrapWidth: maxStrLength);
|
|
|
|
msg = msg.substring(maxStrLength);
|
|
|
|
}
|
|
|
|
//剩余部分
|
|
|
|
debugPrint(msg, wrapWidth: maxStrLength);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// 获取认证token/管理系统登录
|
|
|
|
@POST("anno/token")
|
|
|
|
Future<BaseData> annoToken(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
/// 当日各种金额统计
|
|
|
|
@POST("comprehensiveReport/getDayCounts")
|
|
|
|
Future<BaseData<DayCount>> getDayCounts(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///商家概览/热销榜单,当天传0,昨天传1,最近7天传7,最近30天传30
|
|
|
|
@GET("dashBoard/store/?offsetDay={offsetDay}")
|
|
|
|
Future<BaseData<PopularSalesList>> popularList(
|
|
|
|
@Path("offsetDay") String offsetDay);
|
|
|
|
|
|
|
|
///生意总览/订单量趋势
|
|
|
|
@GET("trend/orderTrend")
|
|
|
|
Future<BaseData<List<OrderTrend>>> orderTrend();
|
|
|
|
|
|
|
|
///会员数量统计/用户概览
|
|
|
|
@GET("largeScreenReport/getDayCounts?date={date}")
|
|
|
|
Future<BaseData<VipCountsInfo>> vipCounts(@Path("date") String date);
|
|
|
|
|
|
|
|
///今日流水/isMonth=0(当月数据),isMonth=1(当日数据)
|
|
|
|
@GET("dashBoard/order?yearMonth={yearMonth}&isMonth={isMonth}")
|
|
|
|
Future<BaseData<List<DayFlowList>>> dayFlow(
|
|
|
|
@Path("yearMonth") String yearMonth, @Path("isMonth") String isMonth);
|
|
|
|
|
|
|
|
///每日单品销量/单品销量报表
|
|
|
|
@POST("audit/salesLeaderboard")
|
|
|
|
Future<BaseData<List<SingleSalesList>>> singleSales(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///各类商品销售状况统计/商品种类销售数据
|
|
|
|
@POST("audit/allKindsSalesStatistics")
|
|
|
|
Future<BaseData<List<GoodsTypeSalesList>>> goodsSalesList(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///经营分析/查询范围 day week month custom
|
|
|
|
@POST("largeScreenReport/saleBusinessAnalysis")
|
|
|
|
Future<BaseData<TradeSummaryList>> saleBusinessAnalysis(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///订单列表
|
|
|
|
@POST("order/findAdminOrderList")
|
|
|
|
Future<BaseData<BusinessOrderList>> findAdminOrderList(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///订单详情
|
|
|
|
@POST("order/getAdminOrderDetail")
|
|
|
|
Future<BaseData<BusinessOrderDetailInfo>> getAdminOrderDetail(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///退款原因列表
|
|
|
|
@POST("reason/page")
|
|
|
|
Future<BaseData<RefundReasonList>> refundReason(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///申请退款
|
|
|
|
@POST("order/refundOrder")
|
|
|
|
Future<BaseData> refundOrder(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///商品分页列表查询/商品分组列表
|
|
|
|
@POST("productGroup/page")
|
|
|
|
Future<BaseData<ProductGroupList>> productGroup(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///后台查询商品列表/商品列表
|
|
|
|
@POST("product/findAdminProductListNew")
|
|
|
|
Future<BaseData<BusinessGoods>> findAdminProductLis(
|
|
|
|
@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
}
|