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

import android.content.Context;
import android.text.TextUtils;
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.LogUtils;
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;

import java.io.IOException;
import java.text.ParseException;

/**
 * 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_URL = "https://ft.qnbar.com/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=";
    private static String ROOM_NEXT_STATUS_BY_ROOM_SN = roomUrl + "tcp/getRoomStatusByOrderSN?order_sn=";

    public RoomInfoModelImpl() {
        Context applicationContext = FangTangApplication.getInstance().getApplicationContext();
        int ftTest = Utils.getInt(applicationContext, "ft-test", 0);
        switch (ftTest) {
            case 0:
                roomUrl = FT_ROOT_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=";
        ROOM_NEXT_STATUS_BY_ROOM_SN = roomUrl + "tcp/getRoomStatusByOrderSN?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;
                }
            }
        }

        LogUtils.i("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;
                        LogUtils.i("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);
                        }
                    }
                });
    }

    public void getRoomSysTime(final String imei, final GetServerTimeListener listener) {
        ThreadUtils.subThread(new ThreadUtils.DoSomeThing() {

            @Override
            public void doSomeThing() {
                long time = -1;
                LogUtils.i("room-info", "request:getRoomInfo,url = " + ROOM_INFO_BY_IMEI_URL + imei);
                try {
                    time = OkHttpClientManager.getSysTime(ROOM_INFO_BY_IMEI_URL + imei);
                } catch (IOException | ParseException e) {
                    e.printStackTrace();
                }
                if (time != -1) {
                    listener.onGetTimeSuccess(time);
                } else {
                    listener.onGetTimeFailure(new WrongMsg());
                }
            }
        });
    }

    @Override
    public void getRoomStatus(String roomSn, final GetRoomStatusListener listener) {
        LogUtils.i("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;
                        LogUtils.i("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 getRoomNestOrderInfo(String orderSn, final GetRoomStatusListener listener) {
        LogUtils.i("room-info", ROOM_NEXT_STATUS_BY_ROOM_SN + orderSn);
        OkHttpClientManager.getAsyn(ROOM_NEXT_STATUS_BY_ROOM_SN + orderSn,
                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;
                        LogUtils.i("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) {
        LogUtils.i("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) {
                        LogUtils.i("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) {
        LogUtils.i("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) {
                        LogUtils.i("room-info", request.toString() + "," + e.getMessage());
                        listener.onOpenDoorFailure();
                    }

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

    @Override
    public void reportSleepSysStatus(String orderSn, String roomSn, final SleepSysStatusListener listener) {
        LogUtils.i("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) {
                        LogUtils.i("room-info", request.toString() + "," + e.getMessage());
                        listener.onSleepSuccess();
                    }

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

    public interface GetRoomInfoListener {
        void onGetRoomInfoSuccess(RoomInfo info);

        void onGetRoomInfoUpdate(RoomInfo info);

        void onGetRoomInfoFailure(WrongMsg wrongMsg);
    }

    public interface GetServerTimeListener {
        void onGetTimeSuccess(long time);

        void onGetTimeFailure(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();
    }
}