choose_table_model.dart 10.2 KB
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/constant/error.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/area_model.dart';
import 'package:one_key/models/tableOuter.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/models/table.dart' as t;
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';

import '../models/get_board_model.dart';

class ChooseTableModel with ChangeNotifier {
  PageState pageState = PageState.Loading;
  List<TableOuter> tableOuterList = []; //区域-桌位列表

  bool swichState = false; //仅看空座

  // Map<String, List<t.Table>> areaTableMap = {}; //区域-桌位Map 已预订和空桌子
  Map<String, List<t.Table>> areaTableMapCanNote =
      {}; //区域-桌位Map  筛选出已经预订的桌子,剩余空桌子

  late Map<String?, List<t.Table>?>
      areaTableMapShow; ////区域-桌位Map 页面展示用(全部或者只看空桌子)
  List<t.Table>? currentTables = []; //当前显示的区域-桌位

  List<t.Table> tablesAll = []; //全部桌子(已预订和空桌子)
  List<t.Table> tablesCanNote = []; //全部桌子(空桌子)
  List<t.Table> tablesShow = []; //页面展示

  List<FeastBoardModel> banquetByDateData = []; //宴会看板数据/宴会预订的数据

  //指定日期、时段宴会预定

 Future<bool> getBanquetByDate(BuildContext context, Map<String, String?> params,
      {showLoading = false}) async {
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.get_banquet_by_date,
          data: params, showLoading: showLoading);
      if (baseResp == null) return false;
      if (baseResp.code == Constant.status_success) {
        if (baseResp.data is List) {
          banquetByDateData = [];
          notifyListeners();
          return true;
        }
        banquetByDateData = [];
        baseResp.data.forEach((key, value) {
          FeastBoardModel boardModel = FeastBoardModel();
          boardModel.title = key;
          boardModel.data = FeastBoardModel.fromJson(value).data;
          banquetByDateData.add(boardModel);
        });
        notifyListeners();
        return true;
      } else {
        Utils.showToast(baseResp.msg ?? "");
      }
      return false;
    } catch (error) {
      print(error.toString());
      if (error is MyError) {}
      return false;
    }
  }

  //获取桌位数据
  Future<List<TableOuter>> getTableList(
      BuildContext context, Map<String, String?> params,
      {bool needLoading = true}) async {
    if (needLoading) {
      pageState = PageState.Loading;
      notifyListeners();
    }
    try {
      BaseResp<List?> baseResp = await DioUtil().request<List>(
          context, Method.post, HttpUrl.table_list,
          data: params, showLoading: false);
      tableOuterList = [];
      if (baseResp.code == Constant.status_success) {
        if (baseResp.data!.isEmpty) {
          pageState = PageState.ConnectivityError;
          notifyListeners();
        }
        if ((baseResp.data![0] as List).isEmpty) {
          pageState = PageState.Success;
          notifyListeners();
          return [];
        }

        tableOuterList = (baseResp.data![0] as List).map((value) {
          TableOuter tableOuter = TableOuter();
          tableOuter.name = value["name"];
          List tableOuterList = value["list"] as List;
          List enableList = []; //删除已停用的桌子,剩余可用的桌子
          tableOuterList.forEach((element) {
            if (element['enable'] != '0') {
              enableList.add(element);
            }
          });
          tableOuter.list = enableList.map((table) {
            return t.Table.fromJson(table as Map<String, dynamic>);
          }).toList();
          try {
            tableOuter.list!.sort(((a, b) =>
                int.parse(a.order_o!).compareTo(int.parse(b.order_o!)))); //排序
          } catch (e) {
            print(e);
          }

          return tableOuter;
        }).toList();
      }
    } catch (error) {
      print(error.toString());
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageState = PageState.ConnectivityError;
            break;
          case 2:
            pageState = PageState.ConnectivityTimeOut;
            break;
          default:
            pageState = PageState.ConnectivityError;
            break;
        }
      }
      notifyListeners();
    }

    List<AreaSunModel>? areaSunModelList = await getRegionBySellerid(context);
    if (areaSunModelList != null) {
      if (areaSunModelList.length > 0) {
        List<String?> tempTableName = []; //有桌子区域
        List<String?> tempAreaName = []; //全部区域
        for (TableOuter itemTable in tableOuterList) {
          tempTableName.add(itemTable.name);
        }
        for (AreaSunModel itemArea in areaSunModelList) {
          tempAreaName.add(itemArea.name);
        }
        if (tempAreaName.length > tempTableName.length) {
          for (var itemT in tempTableName) {
            tempAreaName.removeWhere(
                (element) => element == itemT); //全部区域移除有桌子的区域,剩下没有桌子的区域
          }
          for (var item in tempAreaName) {
            for (AreaSunModel itemarea in areaSunModelList) {
              if (item == itemarea.name) {
                TableOuter tableOuter = TableOuter();
                tableOuter.name = item;
                tableOuter.list = [];
                tableOuter.rid = itemarea.id;
                tableOuter.orderId = itemarea.orderO;
                tableOuterList.add(tableOuter); //区域信息包含有桌子和没有桌子两部分类型
              }
            }
          }
        }
        for (AreaSunModel itemarea in areaSunModelList) {
          for (TableOuter itemto in tableOuterList) {
            if (itemto.name == itemarea.name) {
              itemto.orderId = itemarea.orderO;
              itemto.rid = itemarea.id;
            }
          }
        }
        print(tableOuterList);
        try {
          tableOuterList.sort(((a, b) =>
              int.parse(a.orderId!).compareTo(int.parse(b.orderId!)))); //排序
        } catch (e) {}

        print(tableOuterList);
      }
    }

    return tableOuterList;
  }

  //添加商家桌位
  Future<bool> addTable(
      BuildContext context, Map<String, String?> params) async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    params["sellerid"] = userModel.user!.sellerid;
    params["tid"] = '2';
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.add_table,
          data: params, showLoading: true);
      if (baseResp.code == Constant.status_success) {
        if (baseResp.responseData!['data'] != null &&
            baseResp.responseData!['data'].length > 0) {
          return true;
        } else {
          Utils.showToast(baseResp.msg ?? '新增桌位失败!');
        }
      } else {
        Utils.showToast(baseResp.msg ?? '新增桌位失败!');
      }
      return false;
    } catch (error) {
      print(error.toString());
      // if (error is MyError) {
      //   switch (error.type) {
      //     case 1:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //     case 2:
      //       pageState = PageState.ConnectivityTimeOut;
      //       break;
      //     default:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //   }
      // }
      // notifyListeners();
      return false;
    }
  }

  //获取区域数据
  Future<List<AreaSunModel>?> getRegionBySellerid(
      BuildContext context) async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    Map<String, String?> params = {"sellerid": userModel.user!.sellerid};
    try {
      BaseResp<List?> baseResp = await DioUtil().request<List>(
          context, Method.post, HttpUrl.get_area_by_sellerid,
          data: params, showLoading: false);
      List<AreaSunModel>? areaSunModelList = [];
      if (baseResp.code == Constant.status_success) {
        if (baseResp.data!.length == 1 && baseResp.data![0] is String) {
          return areaSunModelList;
        } else if (baseResp.data!.length > 0) {
          areaSunModelList =
              AreaModel.fromJson(baseResp.responseData as Map<String, dynamic>)
                  .data
                  ?.cast<AreaSunModel>();
          try {
            areaSunModelList!.sort(((a, b) =>
                int.parse(a.orderO!).compareTo(int.parse(b.orderO!)))); //排序
          } catch (e) {}
        }
      }
      return areaSunModelList;
    } catch (error) {
      print(error.toString());
    }
    return null;
  }

  //添加商家桌位区域
  Future<bool> addTableAreas(BuildContext context, String? name) async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    Map<String, String?> params = {
      "sellerid": userModel.user!.sellerid,
      "name": name
    };
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.add_table_area,
          data: params, showLoading: true);
      if (baseResp.code == Constant.status_success) {
        if (baseResp.responseData!['data'] != null &&
            baseResp.responseData!['data'].length > 0) {
          return true;
        } else {
          Utils.showToast(baseResp.msg ?? '新增区域失败!');
        }
      } else {
        Utils.showToast(baseResp.msg ?? '新增区域失败!');
      }
      return false;
    } catch (error) {
      print(error.toString());
      // if (error is MyError) {
      //   switch (error.type) {
      //     case 1:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //     case 2:
      //       pageState = PageState.ConnectivityTimeOut;
      //       break;
      //     default:
      //       pageState = PageState.ConnectivityError;
      //       break;
      //   }
      // }
      // notifyListeners();
      return false;
    }
  }
}