You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

261 lines
9.0 KiB

import 'dart:convert';
import 'dart:io';
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/business_store_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';
import 'data/upload_result.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: 30000,
receiveTimeout: 30000,
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);
///修改密码
@PUT("user")
Future<BaseData> modifyPassword(
@Body() Map<String, dynamic> param);
///商品上下架
@POST("product/putStatus")
Future<BaseData> goodsUpdate(
@Body() Map<String, dynamic> param);
///商品删除
@POST("product/delProduct")
Future<BaseData> delProduct(
@Body() Map<String, dynamic> param);
///新增或修改商品分组/商品分类-新增分类/编辑分类
@POST("productGroup/saveProductGroup")
Future<BaseData> saveProductGroup(
@Body() Map<String, dynamic> param);
///删除分组分类
@POST("productGroup/delProductCategory")
Future<BaseData> delProductCategory(
@Body() Map<String, dynamic> param);
///门店设置-列表
@GET("store/getStoreList?tenantCode={tenantCode}&pageIndex={pageIndex}&pageSize={pageSize}")
Future<BaseData<BusinessStoreList>> getStoreList(@Path("tenantCode") String tenantCode, @Path("pageIndex") String pageIndex, @Path("pageSize") String pageSize);
///删除分组分类
@PUT("store")
Future<BaseData> saveStoreInfo(
@Body() Map<String, dynamic> param);
///文件上传
@POST("file/upload")
@MultiPart()
Future<BaseData<UploadResult>> upload(@Part(name: "file") File data,
@Part(name: "folderId") int folderId);
///单个核销
@POST("ticket/wiped")
Future<BaseData> wiped(
@Body() Map<String, dynamic> param);
///批量核销
@POST("ticket/wipedBatch")
Future<BaseData> wipedBatch(
@Body() Map<String, dynamic> param);
}