RoomInfoModelImpl.java 10.2 KB
package com.xgimi.gimicinema.model;

import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import com.gimi.common.cinema.model.RoomInfo;
import com.gimi.common.cinema.model.RoomQrCodeInfo;
import com.gimi.common.cinema.model.RoomStatusInfo;
import com.gimi.common.cinema.model.WrongMsg;
import com.gimi.common.cinema.utils.OkHttpClientManager;
import com.gimi.common.cinema.utils.Utils;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.squareup.okhttp.Request;
import com.xgimi.gimicinema.application.FangTangApplication;

/**
 * Created by wugian on 2017/4/7
 */
public class RoomInfoModelImpl implements IRoomInfoModel {
    //    private static final String roomUrl = "https://ft.qnbar.cn/develop/api/";
    private static String roomUrl = "https://ft.qnbar.cn/test/api/";
    private static final String FT_ROOT_TEST_URL = "https://ft.qnbar.cn/test/api/";
    private static final String FT_ROOT_DEVELOP_URL = "https://ft.qnbar.cn/develop/api/";
    private static String ROOM_INFO_BY_IMEI_URL = roomUrl + "tcp/getRoomInfoByimei?imei=";
    private static String ROOM_STATUS_BY_ROOM_SN_URL = roomUrl + "tcp/getRoomStatus?room_sn=";
    private static String ROOM_QRCODE_BY_ORDER_SN = roomUrl + "tcp/getEndQRCode?order_sn=";
    private static String ROOM_REPORT_ROOM_STATUS = roomUrl + "tcp/reportRoomStatus?order_sn=";
    private static String ROOM_REPORT_SLEEP_STATUS = roomUrl + "tcp/recvSleepCmdTimeout?order_sn=";

    public RoomInfoModelImpl() {
        Context applicationContext = FangTangApplication.getInstance().getApplicationContext();
        int ftTest = Utils.getInt(applicationContext, "ft-test", 0);
        switch (ftTest) {
            case 0:
                roomUrl = FT_ROOT_TEST_URL;
                break;
            case 1:
                roomUrl = FT_ROOT_DEVELOP_URL;
                break;
            case 2:
                roomUrl = FT_ROOT_TEST_URL;
                break;
        }
        ROOM_INFO_BY_IMEI_URL = roomUrl + "tcp/getRoomInfoByimei?imei=";
        ROOM_STATUS_BY_ROOM_SN_URL = roomUrl + "tcp/getRoomStatus?room_sn=";
        ROOM_QRCODE_BY_ORDER_SN = roomUrl + "tcp/getEndQRCode?order_sn=";
        ROOM_REPORT_ROOM_STATUS = roomUrl + "tcp/reportRoomStatus?order_sn=";
        ROOM_REPORT_SLEEP_STATUS = roomUrl + "tcp/recvSleepCmdTimeout?order_sn=";
    }

    @Override
    public void getRoomInfo(String imei, boolean needUpdate, final GetRoomInfoListener listener) {
        final Context applicationContext = FangTangApplication.getInstance().getApplicationContext();
        final String roomInfoStr = Utils.getString(applicationContext, "room-info");
        if (!TextUtils.isEmpty(roomInfoStr)) {
            RoomInfo roomInfo1 = new Gson().fromJson(roomInfoStr, RoomInfo.class);
            if (roomInfo1 != null) {
                listener.onGetRoomInfoSuccess(roomInfo1);
                if (!needUpdate) {
                    return;
                }
            }
        }

        Log.d("room-info", "request:getRoomInfo,url = " + ROOM_INFO_BY_IMEI_URL + imei);
        OkHttpClientManager.getAsyn(ROOM_INFO_BY_IMEI_URL + imei,
                new OkHttpClientManager.ResultCallback<String>() {
                    @Override
                    public void onError(Request request, Exception e) {
                        WrongMsg wrongMsg = new WrongMsg();
                        wrongMsg.setMsg(e.getMessage());
                        listener.onGetRoomInfoFailure(wrongMsg);
                    }

                    @Override
                    public void onResponse(String response) {
                        RoomInfo roomInfo1 = null;
                        Log.d("room-info", "getRoomInfo" + response);
                        try {
                            roomInfo1 = new Gson().fromJson(response, RoomInfo.class);
                        } catch (JsonSyntaxException e) {
                            e.printStackTrace();
                        }
                        boolean equals = roomInfoStr.equals(response);
                        if (roomInfo1 != null && roomInfo1.getData() != null && !equals) {
                            Utils.saveString(applicationContext, "room-info", response);
                            listener.onGetRoomInfoUpdate(roomInfo1);
                        } else {
                            WrongMsg wrongMsg = new WrongMsg();
                            wrongMsg.setMsg("update-info equal with old:" + equals + "," + response);
                            listener.onGetRoomInfoFailure(wrongMsg);
                        }
                    }
                });
    }

    @Override
    public void getRoomStatus(String roomSn, final GetRoomStatusListener listener) {
        Log.d("room-info", "request:getRoomStatus,url = " + ROOM_STATUS_BY_ROOM_SN_URL + roomSn);
        OkHttpClientManager.getAsyn(ROOM_STATUS_BY_ROOM_SN_URL + roomSn,
                new OkHttpClientManager.ResultCallback<String>() {
                    @Override
                    public void onError(Request request, Exception e) {
                        WrongMsg wrongMsg = new WrongMsg();
                        wrongMsg.setMsg(e.getMessage());
                        listener.onGetRoomStatusFailure(wrongMsg);
                    }

                    @Override
                    public void onResponse(String response) {
                        RoomStatusInfo roomInfo1 = null;
                        Log.d("room-info", "getRoomStatus" + response);

                        try {
                            roomInfo1 = new Gson().fromJson(response, RoomStatusInfo.class);
                        } catch (JsonSyntaxException e) {
                            e.printStackTrace();
                        }
                        if (roomInfo1 != null) {
                            listener.onGetRoomStatusSuccess(roomInfo1);
                        } else {
                            WrongMsg wrongMsg = new WrongMsg();
                            wrongMsg.setMsg(response);
                            listener.onGetRoomStatusFailure(wrongMsg);
                        }
                    }
                });
    }

    @Override
    public void getRoomQrCode(String orderSn, String roomSn, final GetRoomQrCodeListener listener) {
        Log.d("room-info", "request:getRoomQrCode,url = " + ROOM_QRCODE_BY_ORDER_SN + orderSn + "&room_sn=" + roomSn);
        OkHttpClientManager.getAsyn(ROOM_QRCODE_BY_ORDER_SN + orderSn + "&room_sn=" + roomSn,
                new OkHttpClientManager.ResultCallback<String>() {
                    @Override
                    public void onError(Request request, Exception e) {
                        WrongMsg wrongMsg = new WrongMsg();
                        wrongMsg.setMsg(e.getMessage());
                        listener.onGetRoomQrCodeFailure(wrongMsg);
                    }

                    @Override
                    public void onResponse(String response) {
                        Log.d("room-info", "getRoomQrCode:" + response);

                        RoomQrCodeInfo roomInfo1 = null;
                        try {
                            roomInfo1 = new Gson().fromJson(response, RoomQrCodeInfo.class);
                        } catch (JsonSyntaxException e) {
                            e.printStackTrace();
                        }
                        if (roomInfo1 != null) {
                            listener.onGetRoomQrCodeSuccess(roomInfo1);
                        } else {
                            WrongMsg wrongMsg = new WrongMsg();
                            wrongMsg.setMsg(response);
                            listener.onGetRoomQrCodeFailure(wrongMsg);
                        }
                    }
                });
    }


    @Override
    public void reportOpenDoorStatus(String orderSn, final OpenDoorStatusListener listener) {
        Log.d("room-info", "request:reportOpenDoorStatus,url = " + ROOM_REPORT_ROOM_STATUS + orderSn);
        OkHttpClientManager.getAsyn(ROOM_REPORT_ROOM_STATUS + orderSn,
                new OkHttpClientManager.ResultCallback<String>() {
                    @Override
                    public void onError(Request request, Exception e) {
                        Log.d("room-info", request.toString() + "," + e.getMessage());
                        listener.onOpenDoorFailure();
                    }

                    @Override
                    public void onResponse(String response) {
                        Log.d("room-info", "reportOpenDoorStatus:" + response);
                        listener.onOpenDoorSuccess();
                    }
                });
    }

    @Override
    public void reportSleepSysStatus(String orderSn, String roomSn, final SleepSysStatusListener listener) {
        Log.d("room-info", "request:reportSleepSysStatus,url = " + ROOM_QRCODE_BY_ORDER_SN + orderSn);
        OkHttpClientManager.getAsyn(ROOM_REPORT_SLEEP_STATUS + orderSn + "&room_sn=" + roomSn,
                new OkHttpClientManager.ResultCallback<String>() {
                    @Override
                    public void onError(Request request, Exception e) {
                        Log.d("room-info", request.toString() + "," + e.getMessage());
                        listener.onSleepSuccess();
                    }

                    @Override
                    public void onResponse(String response) {
                        Log.d("room-info", "reportSleepSysStatus:" + response);
                        listener.onSleepFailure();
                    }
                });
    }

    public interface GetRoomInfoListener {
        void onGetRoomInfoSuccess(RoomInfo info);

        void onGetRoomInfoUpdate(RoomInfo info);

        void onGetRoomInfoFailure(WrongMsg wrongMsg);
    }

    public interface GetRoomStatusListener {
        void onGetRoomStatusSuccess(RoomStatusInfo info);

        void onGetRoomStatusFailure(WrongMsg wrongMsg);
    }

    public interface GetRoomQrCodeListener {
        void onGetRoomQrCodeSuccess(RoomQrCodeInfo info);

        void onGetRoomQrCodeFailure(WrongMsg wrongMsg);
    }

    public interface OpenDoorStatusListener {
        void onOpenDoorSuccess();

        void onOpenDoorFailure();
    }

    public interface SleepSysStatusListener {
        void onSleepSuccess();

        void onSleepFailure();
    }
}