package com.doumee.keyCabinet.ui.main; import android.app.Application; import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.databinding.ObservableField; import androidx.hilt.lifecycle.ViewModelInject; import androidx.lifecycle.MutableLiveData; import com.doumee.keyCabinet.MApplication; import com.doumee.keyCabinet.R; import com.doumee.keyCabinet.bean.CabinetFaceBean; import com.doumee.keyCabinet.bean.DevConfigBean; import com.doumee.keyCabinet.bean.FaceUserBean; import com.doumee.keyCabinet.bean.LoginBean; import com.doumee.keyCabinet.bean.ManageKeyCabinetBean; import com.doumee.keyCabinet.dao.CabinetGridDo; import com.doumee.keyCabinet.dao.DaoManager; import com.doumee.keyCabinet.event.HttpEvent; import com.doumee.keyCabinet.http.Apis; import com.doumee.keyCabinet.http.param.BaseResponse; import com.doumee.keyCabinet.http.param.CloseGridParam; import com.doumee.keyCabinet.http.param.DevErrInfoParam; import com.doumee.keyCabinet.http.param.RequestBaseObject; import com.doumee.keyCabinet.http.param.SyncGridDataParam; import com.doumee.keyCabinet.http.param.TimeOutUnCloseAlarmParam; import com.doumee.keyCabinet.utils.LMobileInfo; import com.doumee.keyCabinet.utils.ParamsUtil; import com.doumee.keyCabinet.utils.i485.SportUtils; import com.doumee.lib_coremodel.base.BaseModel; import com.doumee.lib_coremodel.base.DataViewModel; import com.doumee.lib_coremodel.http.rxJava.SimpleObserver; import com.doumee.lib_coremodel.http.utils.RxUtils; import com.doumee.lib_coremodel.util.SpUtil; import com.doumee.lib_coremodel.util.StringUtil; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; public class MainVM extends DataViewModel { public ObservableField dayObs = new ObservableField<>(""); public ObservableField timeObs = new ObservableField<>(""); public ObservableField infoObs = new ObservableField<>(""); private MutableLiveData> faceLD = new MutableLiveData<>(); private MutableLiveData confidLD = new MutableLiveData<>(); private boolean isSubmit = false; public void setSubmit(boolean submit) { isSubmit = submit; } @ViewModelInject public MainVM(@NonNull Application application, BaseModel model) { super(application, model); } @Override protected void clickByTypeCommand(int type) { doAction(type); } public void devLogin(){ //清除登录信息 EventBus.getDefault().post(new HttpEvent("获取钥匙柜基本信息-请求")); getRetrofitService(Apis.class).getCabinetInfoForDriver(LMobileInfo.getDeviceUniqueId()) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver>(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { if(200==response.getCode()){ if(response.getData()!=null){ MApplication.saveConfigBean(response.getData()); EventBus.getDefault().post(new HttpEvent("酒精检测开关:"+response.getData().getAlcoholStatus())); confidLD.setValue(response.getData()); if(response.getData().getCabinetGridInfoVOList()!=null){ updateDao(response.getData().getCabinetGridInfoVOList()); } }else { toast(MApplication.mContext.getString(R.string.guide_toast_1)); } }else { MApplication.saveConfigBean(new DevConfigBean()); toast(response.getMessage()); } } @Override public void onError(@NonNull Throwable e) { toast(e.getMessage()); EventBus.getDefault().post(new HttpEvent("获取钥匙柜基本信息-错误:"+ e.getMessage())); } @Override public void onComplete() { } }); } private void updateDao(List beans){ List gridDos = DaoManager.getCabinetGridDao().loadAll(); HashMap oldMap = new HashMap<>(); for(CabinetGridDo d:gridDos){ oldMap.put(d.getGridKey(),d); } List addList = new ArrayList<>(); List updateList = new ArrayList<>(); List errList = new ArrayList<>(); for(ManageKeyCabinetBean bean:beans){ String key = SportUtils.intToHex(Integer.parseInt(bean.getBoardCode()))+SportUtils.intToHex(Integer.parseInt(bean.getChannelCode())); if(oldMap.containsKey(key)){ //修改 CabinetGridDo gridDo = oldMap.get(key); gridDo.setGridId(bean.getId()); gridDo.setCabinetName(bean.getCode()); gridDo.setKeyCode(bean.getKeyCode()); gridDo.setUpdateTime(StringUtil.DateToStr(new Date())); gridDo.setBindStatus(bean.getBindStatus()); gridDo.setGridStatus(bean.getStatus()); gridDo.setKeyStatus(bean.getKeyStatus()); gridDo.setWorkingStatus(bean.getWorkingStatus()); updateList.add(gridDo); oldMap.remove(key); if(isSubmit&&!isCheck(gridDo.getKeyCode(),gridDo.getCurKeyCode())){ SyncGridDataParam.GridDTO errDo = new SyncGridDataParam.GridDTO(); errDo.setActualLable(gridDo.getCurKeyCode()); errDo.setBoardCode(bean.getBoardCode()); errDo.setChannelCode(bean.getChannelCode()); errList.add(errDo); } }else { //新增 CabinetGridDo gridDo = new CabinetGridDo(); gridDo.setGridId(bean.getId()); gridDo.setCabinetName(bean.getCode()); gridDo.setGridKey(key); gridDo.setKeyCode(bean.getKeyCode()); gridDo.setBindStatus(bean.getBindStatus()); gridDo.setGridStatus(bean.getStatus()); gridDo.setKeyStatus(bean.getKeyStatus()); gridDo.setWorkingStatus(bean.getWorkingStatus()); gridDo.setUpdateTime(StringUtil.DateToStr(new Date())); addList.add(gridDo); } } if(oldMap.size()>0) { CabinetGridDo[] dels = new CabinetGridDo[oldMap.size()]; int i=0; for (String key : oldMap.keySet()) { dels[i] = oldMap.get(key); i++; } //删除多的 DaoManager.getCabinetGridDao().delete(dels); } if(addList.size()>0){ DaoManager.getCabinetGridDao().insert(addList); } if(updateList.size()>0){ CabinetGridDo[] upList = new CabinetGridDo[updateList.size()]; for(int i=0;i0){ syncGridData(errList); } } private boolean isCheck(String v1,String v2){ if(TextUtils.isEmpty(v1)&&TextUtils.isEmpty(v2)){ return true; }else if(TextUtils.isEmpty(v1)&&!TextUtils.isEmpty(v2)){ return false; }else if(!TextUtils.isEmpty(v1)&&TextUtils.isEmpty(v2)){ return false; } return v1.equals(v2); } public void devHeart(){ if (MApplication.getConfigBean().getId()==null) { return; } getRetrofitService(Apis.class).heart(MApplication.getConfigBean().getId()) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } public void syncGridData(List errList){ SyncGridDataParam param = new SyncGridDataParam(); param.setCode(LMobileInfo.getDeviceUniqueId()); param.setGridDTOList(errList); StringBuilder sb = new StringBuilder(); for(SyncGridDataParam.GridDTO d:errList){ if(sb.length()>0){ sb.append(","); } sb.append(d.getBoardCode()+"_"+d.getChannelCode()+":"+d.getActualLable()); } EventBus.getDefault().post(new HttpEvent("上报错误钥匙信息===》"+sb.toString())); getRetrofitService(Apis.class).syncGridData(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } public MutableLiveData> getFaceLD() { return faceLD; } public void getFaceDatas() { //showLoading(true); addInfo("查询人脸数据======》调用接口"); getRetrofitService(Apis.class).allFaceList( LMobileInfo.getDeviceUniqueId()) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver>(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { if(200==response.getCode()){ //查询数据 if(response.getData()!=null){ CabinetFaceBean faceBean = response.getData(); List datas = new ArrayList<>(); if(faceBean!=null&&faceBean.getAutoFaceList()!=null){ for(FaceUserBean bean:faceBean.getAutoFaceList()){ bean.setGroupId("0"); } datas.addAll(faceBean.getAutoFaceList()); } if(faceBean!=null&&faceBean.getDriverFaceList()!=null){ for(FaceUserBean bean:faceBean.getDriverFaceList()){ bean.setGroupId("1"); } datas.addAll(faceBean.getDriverFaceList()); } faceLD.setValue(datas); } }else { } } @Override public void onError(@NonNull Throwable e) { //toast(e.getMessage()); } @Override public void onComplete() { //hideLoading(); } }); } public void upErrInfo(SpUtil.SPBean bean) { if (true) { return; } RequestBaseObject request = new RequestBaseObject<>(); DevErrInfoParam param = new DevErrInfoParam(); param.setDevCode(LMobileInfo.getDeviceUniqueId()); param.setErrInfo(bean.getValue()); request.setParam(param); getRetrofitService(Apis.class).upErrInfo(ParamsUtil.encodeRequestBody(request)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { if(200==response.getCode()){ SpUtil.remoreString(bean.getKey()); }else { } } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } public List getOpenGrids(){ return DaoManager.getCabinetGridDao().getOpenGrids(); } public void updateGrids(List updateList){ if(updateList.size()>0){ CabinetGridDo[] upList = new CabinetGridDo[updateList.size()]; for(int i=0;i超时未关门-请求")); getRetrofitService(Apis.class).timeOutUnCloseAlarm(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { toast("===>超时未关门-返回"); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } public void closeGrid(CabinetGridDo gridDo){ CloseGridParam param = new CloseGridParam(); LoginBean loginBean = MApplication.getLoginBean(); param.setCabinetId(MApplication.getConfigBean().getId()); param.setAuthType(loginBean.getAuthType()); param.setMemberId(loginBean.getMemberId()); param.setGridId(gridDo.getGridId()); param.setKeyStatus(!TextUtils.isEmpty(gridDo.getCurKeyCode())?1:2); EventBus.getDefault().post(new HttpEvent("===>首页关闭柜格-请求")); getRetrofitService(Apis.class).closeGrid(ParamsUtil.encodeRequestBody(param)) .compose(RxUtils.schedulersTransformer()) .subscribe(new SimpleObserver(rxJavaGcManager) { @Override public void onNext(@NonNull BaseResponse response) { EventBus.getDefault().post(new HttpEvent("===>首页关闭柜格-返回")); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } }); } public MutableLiveData getConfidLD() { return confidLD; } public void addInfo(String info){ String s = infoObs.get(); s=info+"\n"+s; infoObs.set(s); } }