package com.doumee.keyCabinet.ui.keyCabinet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; import android.text.style.TextAppearanceSpan; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.doumee.keyCabinet.MApplication; import com.doumee.keyCabinet.R; import com.doumee.keyCabinet.base.MyBaseActivity; import com.doumee.keyCabinet.bean.KeyCabinetBean; import com.doumee.keyCabinet.dao.CabinetGridDo; import com.doumee.keyCabinet.dao.DaoManager; import com.doumee.keyCabinet.databinding.KeyCabinetActivityBinding; import com.doumee.keyCabinet.event.CloseGridOneResultEvent; import com.doumee.keyCabinet.event.KeyResultEvent; import com.doumee.keyCabinet.event.GetKeyStatusEvent; import com.doumee.keyCabinet.event.OpenErrEvent; import com.doumee.keyCabinet.event.OpenGridEvent; import com.doumee.keyCabinet.event.OpenGridListEvent; import com.doumee.keyCabinet.event.OpenGridOneResultEvent; import com.doumee.keyCabinet.ui.keyCabinet.adapter.CabinetRcvAdapter; import com.doumee.keyCabinet.utils.i485.SportUtils; import com.doumee.lib_coremodel.bean.event.ActionEventData; import com.doumee.lib_coremodel.util.RecyclerHelp; import com.doumee.lib_coremodel.util.StringUtil; import com.doumee.lib_coremodel.view.ToastView; import com.example.datalibrary.utils.ToastUtils; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import dagger.hilt.android.AndroidEntryPoint; @AndroidEntryPoint public class KeyCabinetActivity extends MyBaseActivity { private CabinetRcvAdapter adapter; private KeyCabinetBean selectBean; //0=取 1=还 private int flag; //状态,0:待开门,1:待关门 private int status; private int ysDownCount = 10; private boolean isChose; @Override public int getLayoutId() { return R.layout.key_cabinet_activity; } @Override public void initView(@Nullable Bundle savedInstanceState) { isAddCountTimer = true; normalConfig(); getDB().setModel(getVM()); flag = MApplication.getLoginBean().getFlag(); adapter = new CabinetRcvAdapter(this, R.layout.cabinet_rcv_item, new CabinetRcvAdapter.OnItemClick() { @Override public void onItemClick(KeyCabinetBean item) { if(isChose){ return; } selectBean = item; } }); RecyclerHelp.bindVG(this,getDB().rcvKm,3,30); getDB().rcvKm.setAdapter(adapter); } @Override public void initData(@Nullable Bundle savedInstanceState) { getVM().getDatasLD().observe(this, new Observer>() { @Override public void onChanged(List beans) { if(beans.size()>0){ beans.get(0).getIsSelected().set(true); beans.get(0).getText1Color().set(0xffffffff); beans.get(0).getText2Color().set(0xffffffff); selectBean = beans.get(0); changeBtBg(); adapter.refreshData(beans); getVM().emptyVisibility.set(View.GONE); //更新信息 updateDao(beans); }else { getVM().emptyVisibility.set(View.VISIBLE); } } }); getVM().getDatas(); } private void updateDao(List beans){ List gridDos = DaoManager.getCabinetGridDao().loadAll(); HashMap oldMap = new HashMap<>(); for(CabinetGridDo d:gridDos){ oldMap.put(d.getGridKey(),d); } List updateList = new ArrayList<>(); for(KeyCabinetBean 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); } } if(updateList.size()>0){ CabinetGridDo[] upList = new CabinetGridDo[updateList.size()]; for(int i=0;iSystem.currentTimeMillis()){ //校验返回时间<命令时间 return; } if(handler.hasMessages(0)){ handler.removeMessages(0); } String key = SportUtils.intToHex(Integer.parseInt(selectBean.getBoardCode())) +SportUtils.intToHex(Integer.parseInt(selectBean.getChannelCode())); if(flag==0) { //领取 //查询钥匙号 CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key); if (gridDo != null) { if (gridDo.getIsOpen() == 0) { //关门成功 if (!TextUtils.isEmpty(gridDo.getCurKeyCode())) { if (gridDo.getCurKeyCode().equals(selectBean.getKeyCode())) { //领取失败 isOpened = false; getVM().doAction(6); getVM().closeGrid(gridDo); }else { //钥匙不匹配 getVM().doAction(10); EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(), selectBean.getBoardCode())); } } else { //钥匙拿走了 isOpened = false; getVM().doAction(5); getVM().closeGrid(gridDo); } }else { //没关门 if(TextUtils.isEmpty(gridDo.getCurKeyCode())){ //空了 getVM().doAction(7); } } }else { ToastView.show(MApplication.mContext, "未查询到规格信息"); } }else { //归还 CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key); if (gridDo != null) { if (gridDo.getIsOpen() == 0) { //关门成功 if (!TextUtils.isEmpty(gridDo.getCurKeyCode())) { if (gridDo.getCurKeyCode().equals(selectBean.getKeyCode())) { //相同归还成功 isOpened = false; getVM().doAction(8); getVM().closeGrid(gridDo); }else { //钥匙不匹配 getVM().doAction(10); EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(), selectBean.getBoardCode())); } } else { //钥匙未归还 isOpened = false; getVM().doAction(9); getVM().closeGrid(gridDo); } }else { //没关门 if(!TextUtils.isEmpty(gridDo.getCurKeyCode())){ //有钥匙了 getVM().doAction(7); } } } else { ToastView.show(MApplication.mContext, "未查询到规格信息"); } } } } } private Handler handler = new Handler(){ @Override public void handleMessage(@NonNull Message msg) { switch (msg.what){ case 0: //重新发送钥匙查询 //发送查询钥匙号 EventBus.getDefault().post(new GetKeyStatusEvent()); handler.sendEmptyMessageDelayed(0,1200); break; case 1: EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(), selectBean.getBoardCode())); handler.sendEmptyMessageDelayed(1,1000); break; default: break; } } }; }