message_model.dart 10.9 KB
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/message.dart';
import 'package:one_key/models/new_unmessage_model.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/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';

class MessageModel extends ChangeNotifier {
  List<NewUnmessage> messagesHas = []; //消息

  List<NewUnmessage> messagesUn = []; //消息未处理的,用来清理消息的时候判断是否可清理
  PageState pageStateUn = PageState.Loading; //未处理
  PageState pageState = PageState.Loading; //已处理
  // 未处理消息总数
  int onlineTotal = 0; //在线消息
  int inlineTotal = 0; //内部消息
  int orderTotal = 0; //提前点餐
  int checkTotal = 0; //在线买单

  int allUnNum = 0; //全部未读

  List<NewUnmessage> messagesUnTemp = [];

  // initData() {
  //   messagesHas = []; //消息
  //   messagesUn = [];
  //   pageStateUn = PageState.Loading; //未处理
  //   pageState = PageState.Loading; //已处理
  // }

  //获取已处理消息
  getMessages(BuildContext context, Map<String, String> params,
      {showLoading = true}) async {
    if (showLoading) {
      pageState = PageState.Loading;
      messagesHas = [];
      notifyListeners();
    }
    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.new_get_message_list,
            data: params, showLoading: false)
        .catchError((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();
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      String uid = Provider.of<UserModel>(context, listen: false).user.openid;
      List<NewUnmessage> temp = [];
      if (params['offset'] == "0") {
        messagesHas = baseResp.data.map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList();
      } else {
        messagesHas.addAll(baseResp.data.map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList());
      }
      temp.addAll(messagesHas);
      messagesHas = [];
      temp.forEach((element) {
        // if (element.uid == uid && element.message_type == '16') {
        //   print('object');
        // }
        if (element.message_type == '16') {
          print('object');
        } else {
          messagesHas.add(element);
        }
      });

      // if (params["type_id"] == "10") {
      //   //在线预订
      //   messages.removeWhere((message) {
      //     if (message.message_type.toString() == "10") {
      //       //在线预订
      //       if (message.status == "4") {
      //         //已取消
      //         return true;
      //       }
      //       return false;
      //     } else if (message.message_type.toString() == "11") {
      //       //取消在线预订
      //       return false;
      //     }
      //     return true;
      //   });
      // }
      if (messagesHas.isEmpty) {
        pageState = PageState.Empty;
      } else {
        pageState = PageState.Success;
      }
      notifyListeners();
    }
  }

//获取未处理消息数目
  getNewGetUntreatedMsgNum(BuildContext context, Map<String, String> params,
      {showLoading = true}) async {
    if (showLoading) {
      pageStateUn = PageState.Loading;
      messagesUn = [];
      notifyListeners();
    }
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(
            context, Method.get, HttpUrl.new_get_untreated_msg_list,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
      PageState pageStateTemp;
      // if (error is MyError) {
      //   switch (error.type) {
      //     case 1:
      //       pageStateUn = PageState.ConnectivityError;
      //       break;
      //     case 2:
      //       pageStateUn = PageState.ConnectivityTimeOut;
      //       break;
      //     default:
      //       pageStateUn = PageState.ConnectivityError;
      //       break;
      //   }
      // }

      // notifyListeners();
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      int tempnum = 0;
      String uid = Provider.of<UserModel>(context, listen: false).user.openid;
      List<NewUnmessage> temp = [];
      // List<NewUnmessage> messages = [];
      if (params['offset'] == "0") {
        messagesUnTemp = baseResp.data['list'].map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList();
      } else {
        messagesUnTemp.addAll(baseResp.data['list'].map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList());
      }
      temp.addAll(messagesUnTemp);
      messagesUnTemp = [];

      temp.forEach((element) {
        // if (element.uid == uid && element.message_type == '16') {
        //   tempnum++;
        // }
        if (element.message_type == '16') {
          tempnum++;
        } else {
          messagesUnTemp.add(element);
        }
      });
      messagesUn = [];
      messagesUn.addAll(messagesUnTemp);
      if (tempnum > 0) {
        allUnNum = baseResp.data['count'] - tempnum;
      } else {
        allUnNum = baseResp.data['count'];
      }
      notifyListeners();
    }
  }

  //获取未处理消息和数目
  getNewGetUntreatedMsgList(BuildContext context, Map<String, String> params,
      {showLoading = true}) async {
    if (showLoading) {
      pageStateUn = PageState.Loading;
      // messagesUn = [];
      notifyListeners();
    }
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(
            context, Method.get, HttpUrl.new_get_untreated_msg_list,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
      PageState pageStateTemp;
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageStateUn = PageState.ConnectivityError;
            break;
          case 2:
            pageStateUn = PageState.ConnectivityTimeOut;
            break;
          default:
            pageStateUn = PageState.ConnectivityError;
            break;
        }
      }

      notifyListeners();
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      // List<NewUnmessage> messages = [];
      int tempnum = 0;
      String uid = Provider.of<UserModel>(context, listen: false).user.openid;
      List<NewUnmessage> temp = [];
      if (params['offset'] == "0") {
        messagesUnTemp = baseResp.data['list'].map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList();
      } else {
        messagesUnTemp.addAll(baseResp.data['list'].map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList());
      }
      temp.addAll(messagesUnTemp);
      messagesUnTemp = [];
      messagesUn = [];

      temp.forEach((element) {
        // if (element.uid == uid && element.message_type == '16') {
        //   tempnum++; // 自己取消的预订消息删除去
        // }
        if (element.message_type == '16') {
          tempnum++; // 经理取消的预订消息删除去
        } else {
          messagesUnTemp.add(element); //其他消息加进来出去
        }
      });
      messagesUn.addAll(messagesUnTemp);
      if (tempnum > 0) {
        allUnNum = baseResp.data['count'] - tempnum; // 对应消息数
      } else {
        allUnNum = baseResp.data['count'];
      }

      // if(params["type_id"]=="10"){//在线预订
      //   messages.removeWhere((message) {
      //     if (message.message_type.toString() == "10") {//在线预订
      //       if (message.status == "4") {//已取消
      //         return true;
      //       }
      //       return false;
      //     } else if (message.message_type.toString() == "11") {//取消在线预订
      //       return false;
      //     }
      //     return true;
      //   });
      // }
      if (messagesUnTemp.isEmpty) {
        //未处理
        pageStateUn = PageState.Empty;
      } else {
        //未处理
        pageStateUn = PageState.Success;
      }
      print(messagesUn);
      notifyListeners();
    }
  }

  //获取未处理消息数目
  // getUnMsgNum(BuildContext context, Map<String, String> params) async {
  //   BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
  //       .request<Map<String, dynamic>>(
  //           context, Method.get, HttpUrl.get_message_num,
  //           data: params, showLoading: false)
  //       .catchError((error) {
  //     print(error.toString());
  //   });
  //   if (baseResp != null && baseResp.code == Constant.status_success) {
  //     onlineTotal = int.parse(baseResp.data['online_total'].toString());
  //     inlineTotal = int.parse(baseResp.data['inline_total'].toString());
  //     orderTotal = int.parse(baseResp.data['order_total'].toString());
  //     checkTotal = int.parse(baseResp.data['check_total'].toString());
  //     notifyListeners();
  //   }
  // }

  //设置消息状态
  setMessageStatus(BuildContext context, Map<String, String> params) async {
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(
            context, Method.get, HttpUrl.push_msg_set_message_status,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp.code == Constant.status_success) {
    } else {
      Utils.showToast(baseResp.msg);
    }
  }

  //清理过期消息
  Future<bool> setClearMessage(BuildContext context,
      {bool showLoading = true}) async {
    Map<String, String> params = {
      'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
    };

    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(context, Method.get, HttpUrl.set_clear_Message,
            data: params, showLoading: showLoading)
        .catchError((error) {
      print(error.toString());
      Utils.showToast('清理失败,请重试');
      return false;
    });
    if (baseResp.code == Constant.status_success) {
      if (baseResp.data) {
        return true;
      } else {
        Utils.showToast('清理失败,请重试');
      }
    } else {
      Utils.showToast(baseResp.msg);
    }
    return false;
  }

  //根据消息id移除消息
  removeUntreatedMessageByMid(String mid) {
    messagesUn.removeWhere((element) => element.id == mid);
    if (messagesUn.length == 0) {
      pageStateUn = PageState.Empty;
    }
    notifyListeners();
  }
}