SmartControlPresenter.java 8.03 KB
package com.qnbar.smc.service;

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.LogUtils;
import com.gimi.common.cinema.utils.SystemUtils;
import com.telink.bluetooth.light.model.Mesh;
import com.xgimi.gimicinema.BuildConfig;
import com.xgimi.gimicinema.application.FangTangApplication;
import com.xgimi.gimicinema.model.IRoomInfoModel;
import com.xgimi.gimicinema.model.RoomInfoModelImpl;

import java.util.Calendar;

/**
 * Created by zyh on 2017/5/19
 */
public class SmartControlPresenter implements SmartControlContract.Presenter {
    private IRoomInfoModel roomInfoModel;
    private SmartControlContract.View mainView;


    public SmartControlPresenter(SmartControlContract.View mainView) {
        this.mainView = mainView;
        mainView.setPresenter(this);
        roomInfoModel = new RoomInfoModelImpl();
    }

    @Override
    public void start() {

    }

    @Override
    public void updateRoomInfo(final Context context) {
        String imei = SystemUtils.getPid(context, BuildConfig.BUILD_TYPE);
        roomInfoModel.getRoomInfo(imei, true, new RoomInfoModelImpl.GetRoomInfoListener() {
            @Override
            public void onGetRoomInfoSuccess(RoomInfo info) {
                mainView.notifyGetRoomInfo(info);
                String meshName = /*"abc";*/info.getData().getMesh_name();
                String pwd = /*"123";*/info.getData().getPassword();
                saveMesh(context, meshName, pwd);
                Log.d("room-info", "get success:" + info.toString());
            }

            @Override
            public void onGetRoomInfoUpdate(RoomInfo info) {
                Log.d("room-info", "update success:" + info.toString());
                String meshName = /*"abc";*/info.getData().getMesh_name();
                String pwd = /*"123";*/info.getData().getPassword();
                saveMesh(context, meshName, pwd);
                mainView.notifyUpdateRoomInfo(info);
            }

            @Override
            public void onGetRoomInfoFailure(WrongMsg wrongMsg) {
                Log.d("room-info", "get failure:" + wrongMsg.toString());
            }
        });
    }

    private void saveMesh(Context context, String meshName, String pwd) {
        Log.d("room-info", "saveMesh:" + meshName + "," + pwd);
        if (!TextUtils.isEmpty(meshName) && !TextUtils.isEmpty(pwd) && !"dadousmart".equals(meshName)) {
            FangTangApplication applicationContext = (FangTangApplication) context.getApplicationContext();
            Mesh mesh = applicationContext.getMesh();

            if (mesh == null)
                mesh = new Mesh();
            mesh.allocDeviceAddress = null;
            mesh.devices.clear();
            mesh.factoryName = mesh.name;
            mesh.factoryPassword = mesh.password;
            mesh.name = meshName;
            mesh.password = pwd;

            if (mesh.saveOrUpdate()) {
                Log.d("room-info", "saveMesh success:" + meshName + "," + pwd);
                applicationContext.setMesh(mesh);
            }
        }
    }

    @Override
    public void getOrderInfo(Context context) {
        String imei = SystemUtils.getPid(context, BuildConfig.BUILD_TYPE);
        roomInfoModel.getRoomInfo(imei, false, new RoomInfoModelImpl.GetRoomInfoListener() {
            @Override
            public void onGetRoomInfoSuccess(RoomInfo info) {
                Log.d("room-info", "getOrderInfo:" + info.toString());
                roomInfoModel.getRoomStatus(info.getData().getRoom_sn(), new RoomInfoModelImpl.GetRoomStatusListener() {
                    @Override
                    public void onGetRoomStatusSuccess(RoomStatusInfo info) {
                        Log.d("room-info", "getOrderInfo#onGetRoomStatusSuccess:" + info.toString());
                        mainView.updateOrderInfo(info);
                        mainView.updateInitGetOrderInfo(false);
                    }

                    @Override
                    public void onGetRoomStatusFailure(WrongMsg wrongMsg) {
                        Log.d("room-info", "onGetRoomStatusFailure :" + wrongMsg.toString());
                        mainView.updateInitGetOrderInfo(false);
                    }
                });
            }

            @Override
            public void onGetRoomInfoUpdate(RoomInfo info) {
                Log.d("room-info", "update success:" + info.toString());
            }

            @Override
            public void onGetRoomInfoFailure(WrongMsg wrongMsg) {
                Log.d("room-info", "get failure:" + wrongMsg.toString());
            }
        });
    }


    @Override
    public void getNextOrderInfo(Context context, String roomSn) {
        roomInfoModel.getRoomNestOrderInfo(roomSn, new RoomInfoModelImpl.GetRoomStatusListener() {
            @Override
            public void onGetRoomStatusSuccess(RoomStatusInfo info) {
                LogUtils.i("room-info", "onGetRoomStatusSuccess:" + info.toString());
                mainView.updateOrderInfo(info);
            }

            @Override
            public void onGetRoomStatusFailure(WrongMsg wrongMsg) {
                LogUtils.i("room-info", "onGetRoomStatusFailure:" + wrongMsg.toString());
            }
        });
    }

    @Override
    public void reportOpenDoorStatus(String oderSn) {
        roomInfoModel.reportOpenDoorStatus(oderSn, new RoomInfoModelImpl.OpenDoorStatusListener() {
            @Override
            public void onOpenDoorSuccess() {
                mainView.reportResult(true);
                LogUtils.i("room-info", "report success");
            }

            @Override
            public void onOpenDoorFailure() {
                mainView.reportResult(false);
                LogUtils.i("room-info", "report failure");
            }
        });
    }

    @Override
    public void getCleanQrCode(String orderSn, String roomSn) {
        roomInfoModel.getRoomQrCode(orderSn, roomSn, new RoomInfoModelImpl.GetRoomQrCodeListener() {
            @Override
            public void onGetRoomQrCodeSuccess(RoomQrCodeInfo info) {
                LogUtils.i("room-info", "getCleanQrCode#onGetRoomQrCodeSuccess:" + info.toString());
                mainView.prepareRoomQrCodeInfo(info);
            }

            @Override
            public void onGetRoomQrCodeFailure(WrongMsg wrongMsg) {
                LogUtils.i("room-info", "onGetRoomQrCodeFailure:" + wrongMsg.toString());
            }
        });
    }

    @Override
    public void getSysTime(Context context) {
        String imei = SystemUtils.getPid(context, BuildConfig.BUILD_TYPE);
        roomInfoModel.getRoomSysTime(imei, new RoomInfoModelImpl.GetServerTimeListener() {
            @Override
            public void onGetTimeSuccess(long time) {
                Calendar instance = Calendar.getInstance();
                instance.setTimeInMillis(time * 1000);
                int hour = instance.get(Calendar.HOUR_OF_DAY);
                int minute = instance.get(Calendar.MINUTE);
                Log.d("getSysTime", "current minute:" + (hour * 60 + minute) + "");
                mainView.setOpenDoorTime(hour * 60 + minute);
            }

            @Override
            public void onGetTimeFailure(WrongMsg wrongMsg) {
                Log.d("getSysTime", calServerTimeMin() + "");
                mainView.setOpenDoorTime(calServerTimeMin());

            }
        });
    }

    private int calServerTimeMin() {
        Calendar cal = Calendar.getInstance();
        int hour = cal.get(Calendar.HOUR_OF_DAY);//小时
        int minute = cal.get(Calendar.MINUTE);//分
        int serverTimeMin = (hour * 60 + minute);
        Log.d("room-info", "current minute:" + (hour * 60 + minute) + "");
        return serverTimeMin;
    }
}