package com.doumee.keyCabinet.ui.keyCabinet;
|
|
import androidx.annotation.Nullable;
|
import androidx.lifecycle.Observer;
|
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.text.SpannableString;
|
import android.text.Spanned;
|
import android.text.TextUtils;
|
import android.text.style.TextAppearanceSpan;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.doumee.keyCabinet.R;
|
import com.doumee.keyCabinet.base.MyBaseActivity;
|
import com.doumee.keyCabinet.bean.ManageKeyCabinetBean;
|
import com.doumee.keyCabinet.dao.CabinetGridDo;
|
import com.doumee.keyCabinet.dao.DaoManager;
|
import com.doumee.keyCabinet.databinding.ManageCabinetActivityBinding;
|
import com.doumee.keyCabinet.event.CloseGridOneResultEvent;
|
import com.doumee.keyCabinet.event.HttpEvent;
|
import com.doumee.keyCabinet.event.ManageOpenGridResultEvent;
|
import com.doumee.keyCabinet.event.OpenAllGridEvent;
|
import com.doumee.keyCabinet.event.OpenGridEvent;
|
import com.doumee.keyCabinet.event.OpenGridListEvent;
|
import com.doumee.keyCabinet.event.TimeClockEvent;
|
import com.doumee.keyCabinet.ui.keyCabinet.adapter.ManageCabinetRcvAdapter;
|
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 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 ManageCabinetActivity extends MyBaseActivity<ManageCabinetVM, ManageCabinetActivityBinding> {
|
private ManageCabinetRcvAdapter adapter;
|
|
//是否可批量操作
|
private boolean isCanPL = false;
|
//可标记:全借出、全故障
|
private boolean isCanBJ = false;
|
private int keyStatus = -1;
|
|
@Override
|
public int getLayoutId() {
|
return R.layout.manage_cabinet_activity;
|
}
|
|
private HashMap<String,String> waitOpenMap = new HashMap<>();
|
|
@Override
|
public void initView(@Nullable Bundle savedInstanceState) {
|
isAddCountTimer = false;
|
normalConfig();
|
getDB().setModel(getVM());
|
adapter = new ManageCabinetRcvAdapter(this, R.layout.manage_cabinet_rcv_item, new ManageCabinetRcvAdapter.OnItemClick() {
|
@Override
|
public void onItemClick(ManageKeyCabinetBean item) {
|
updateBtnStatus();
|
}
|
});
|
RecyclerHelp.bindVG(this,getDB().rcvKm,3,30);
|
getDB().rcvKm.setAdapter(adapter);
|
}
|
|
@Override
|
public void initData(@Nullable Bundle savedInstanceState) {
|
getVM().getDatasLD().observe(this, new Observer<List<ManageKeyCabinetBean>>() {
|
@Override
|
public void onChanged(List<ManageKeyCabinetBean> gridInfoBeans) {
|
if(getDB().clCz.getVisibility()==View.VISIBLE){
|
getDB().clCz.setVisibility(View.GONE);
|
}
|
if(gridInfoBeans.size()>0){
|
adapter.refreshData(gridInfoBeans);
|
getVM().emptyVisibility.set(View.GONE);
|
//更新信息
|
updateDao(gridInfoBeans);
|
}else {
|
getVM().emptyVisibility.set(View.VISIBLE);
|
}
|
}
|
});
|
getVM().getCabinetDetail();
|
}
|
|
private void updateBtnStatus(){
|
List<ManageKeyCabinetBean> datas = adapter.getListData();
|
isCanPL = false;
|
isCanBJ = false;
|
keyStatus = -1;
|
for(ManageKeyCabinetBean d:datas){
|
if(d.getIsSelected().get()){
|
isCanPL = true;
|
if(keyStatus==-1){
|
keyStatus = getGridStatus(d);
|
}else {
|
if(keyStatus!=getGridStatus(d)){
|
//不同
|
keyStatus = -2;
|
}
|
}
|
}
|
}
|
if(isCanPL){
|
getDB().tvPlOpen.setBackgroundResource(R.drawable.shape_mb_bt_ok);
|
}else {
|
getDB().tvPlOpen.setBackgroundResource(R.drawable.shape_mb_bt_faile);
|
}
|
if(keyStatus==2||keyStatus==4){
|
isCanBJ = true;
|
getDB().tvBj.setBackgroundResource(R.drawable.shape_mb_bt_ok);
|
}else {
|
getDB().tvBj.setBackgroundResource(R.drawable.shape_mb_bt_faile);
|
}
|
}
|
|
private int getGridStatus(ManageKeyCabinetBean grid){
|
if(grid.getWorkingStatus()==1){
|
return 4;
|
}else {
|
return grid.getKeyStatus();
|
}
|
}
|
|
private void updateDao(List<ManageKeyCabinetBean> beans){
|
List<CabinetGridDo> gridDos = DaoManager.getCabinetGridDao().loadAll();
|
HashMap<String,CabinetGridDo> oldMap = new HashMap<>();
|
for(CabinetGridDo d:gridDos){
|
oldMap.put(d.getGridKey(),d);
|
}
|
List<CabinetGridDo> addList = new ArrayList<>();
|
List<CabinetGridDo> updateList = 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);
|
}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(addList.size()>0){
|
DaoManager.getCabinetGridDao().insert(addList);
|
}
|
if(updateList.size()>0){
|
CabinetGridDo[] upList = new CabinetGridDo[updateList.size()];
|
for(int i=0;i<updateList.size();i++){
|
upList[i] = updateList.get(i);
|
}
|
DaoManager.getCabinetGridDao().update(upList);
|
}
|
}
|
|
private List<Integer> bjIds = new ArrayList<>();
|
private boolean isAllOpen = false;
|
@Override
|
protected void doRegister(int type, ActionEventData data) {
|
switch (type){
|
case 1:
|
//校验柜子是否都已关闭
|
if(checkOpen()){
|
return;
|
}
|
finish();
|
break;
|
case 2:
|
{
|
//全开
|
//批量开门,校验是否可打开
|
List<Integer> ids = new ArrayList<>();
|
List<ManageKeyCabinetBean> datas = adapter.getListData();
|
for (ManageKeyCabinetBean bean : datas) {
|
ids.add(bean.getId());
|
}
|
if (ids.size() == 0) {
|
Toast.makeText(mContext, "请选择柜格", Toast.LENGTH_SHORT).show();
|
return;
|
}
|
getVM().batchOpenGridAdmin(ids,true);
|
}
|
break;
|
case 3: {
|
if(!isCanPL){
|
return;
|
}
|
//批量开门,校验是否可打开
|
List<Integer> ids = new ArrayList<>();
|
List<ManageKeyCabinetBean> datas = adapter.getListData();
|
for (ManageKeyCabinetBean bean : datas) {
|
if (bean.getIsSelected().get()) {
|
ids.add(bean.getId());
|
}
|
}
|
if (ids.size() == 0) {
|
Toast.makeText(mContext, "请选择柜格", Toast.LENGTH_SHORT).show();
|
return;
|
}
|
getVM().batchOpenGridAdmin(ids,false);
|
}break;
|
case 8: {
|
//全开
|
isAllOpen = true;
|
List<ManageKeyCabinetBean> datas = adapter.getListData();
|
for (ManageKeyCabinetBean bean : datas) {
|
String key = SportUtils.intToHex(Integer.parseInt(bean.getBoardCode()))+
|
SportUtils.intToHex(Integer.parseInt(bean.getChannelCode()));
|
waitOpenMap.put(key,bean.getCode());
|
}
|
EventBus.getDefault().post(new OpenAllGridEvent());
|
}break;
|
case 10: {
|
//批量开
|
isAllOpen = false;
|
List<ManageKeyCabinetBean> datas = adapter.getListData();
|
List<String> keys = new ArrayList<>();
|
for (ManageKeyCabinetBean bean : datas) {
|
if(bean.getIsSelected().get()) {
|
String key = SportUtils.intToHex(Integer.parseInt(bean.getBoardCode())) +
|
SportUtils.intToHex(Integer.parseInt(bean.getChannelCode()));
|
waitOpenMap.put(key, bean.getCode());
|
keys.add(key);
|
}
|
}
|
EventBus.getDefault().post(new OpenGridListEvent(keys));
|
}break;
|
case 4: {
|
//标记
|
if(!isCanPL){
|
return;
|
}
|
bjIds.clear();
|
|
List<ManageKeyCabinetBean> datas = adapter.getListData();
|
for (ManageKeyCabinetBean bean : datas) {
|
if (bean.getIsSelected().get()) {
|
bjIds.add(bean.getId());
|
}
|
}
|
if (bjIds.size() == 0) {
|
Toast.makeText(mContext, "请选择柜格", Toast.LENGTH_SHORT).show();
|
return;
|
}
|
if(keyStatus==4){
|
//全为故障
|
getDB().tvBjgz.setText("标记为正常");
|
getDB().tvBjgz.setTextColor(0xff279BAA);
|
getDB().tvBjgz.setBackgroundResource(R.drawable.shape_mb_cz_2_bg);
|
getDB().tvBy.setVisibility(View.GONE);
|
}else {
|
//标记故障
|
getDB().tvBjgz.setText("标记为故障");
|
getDB().tvBjgz.setTextColor(0xffFF3600);
|
getDB().tvBjgz.setBackgroundResource(R.drawable.shape_mb_cz_1_bg);
|
getDB().tvBy.setVisibility(View.VISIBLE);
|
}
|
getDB().clCz.setVisibility(View.VISIBLE);
|
}break;
|
case 5:
|
getDB().clCz.setVisibility(View.GONE);
|
break;
|
case 6:
|
//维修
|
getVM().markRepair(bjIds);
|
break;
|
case 7:
|
if(keyStatus==4) {
|
//正常
|
getVM().cancelFault(bjIds);
|
}else {
|
//故障
|
getVM().markFault(bjIds);
|
}
|
break;
|
case 9: {
|
updateBtnStatus();
|
if(isShowOpenTip==true) {
|
//清空开门提醒
|
isShowOpenTip = false;
|
getDB().clKmTip.setVisibility(View.GONE);
|
}else {
|
getDB().clKmTip.setVisibility(View.GONE);
|
}
|
}break;
|
case 11:
|
updateBtnStatus();
|
break;
|
default:
|
break;
|
}
|
}
|
|
//退出关门提醒
|
private int tipDownCount = 10;
|
private boolean isShowTip;
|
|
//开门提醒
|
private int openTipDownCount = 60;
|
private boolean isShowOpenTip;
|
@Subscribe
|
public void TimeClockEvent(TimeClockEvent e){
|
if(isShowTip){
|
if(tipDownCount==0){
|
isShowTip = false;
|
getDB().clTip.setVisibility(View.GONE);
|
finish();
|
}else {
|
tipDownCount--;
|
getDB().tvDjs.setText(tipDownCount+"s");
|
}
|
}
|
if(isShowOpenTip){
|
if(openTipDownCount==0){
|
doRegister(9,null);
|
}else {
|
openTipDownCount--;
|
getDB().tvClKmClose.setText(openTipDownCount+"s 自动关闭");
|
}
|
}
|
}
|
|
|
/**
|
* 校验是否有没关门的
|
* @return
|
*/
|
private boolean checkOpen(){
|
List<CabinetGridDo> gridDos = DaoManager.getCabinetGridDao().getOpenGrids();
|
if (gridDos.size() > 0) {
|
tipDownCount = 10;
|
isShowTip = true;
|
getDB().tvDjs.setText(tipDownCount + "s");
|
StringBuilder sb = new StringBuilder();
|
for(CabinetGridDo d:gridDos){
|
if (sb.length()>0) {
|
sb.append("、");
|
}
|
String name = d.getCabinetName();
|
if (TextUtils.isEmpty(name)) {
|
name = gridDos.get(0).getGridKey();
|
}
|
sb.append(name);
|
}
|
getDB().tvTip22.setText(getTipText(sb.toString()), TextView.BufferType.SPANNABLE);
|
getDB().clTip.setVisibility(View.VISIBLE);
|
return true;
|
}else {
|
isShowTip = false;
|
getDB().clTip.setVisibility(View.GONE);
|
return false;
|
}
|
}
|
|
private SpannableString getTipText(String name){
|
String text = "请关闭"+name+"柜门";
|
SpannableString styledText = new SpannableString(text);
|
styledText.setSpan(new TextAppearanceSpan(this,R.style.style_tip2), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip1),
|
3, 3+name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
styledText.setSpan(new TextAppearanceSpan(this,R.style.style_tip2), name.length()+3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
return styledText;
|
}
|
|
private SpannableString getTipText2(String begin,String name,String end){
|
String text = begin+name+end;
|
SpannableString styledText = new SpannableString(text);
|
styledText.setSpan(new TextAppearanceSpan(this,R.style.style_tip2), 0, begin.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip1),
|
begin.length(), begin.length()+name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
styledText.setSpan(new TextAppearanceSpan(this,R.style.style_tip2), begin.length()+name.length(), text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
return styledText;
|
}
|
|
private void showKeyErrTip(CabinetGridDo gridDo){
|
getDB().imgClKm1.setImageResource(R.mipmap.ic_jjfail);
|
getDB().tvClKm1.setText("识别失败");
|
getDB().tvClKm2.setText(getTipText2("钥匙柜",gridDo.getCabinetName(),"识别失败"), TextView.BufferType.SPANNABLE);
|
getDB().tvClKmClose.setText("重新存放");
|
getDB().tvClKmClose.setTextColor(0xffffffff);
|
getDB().tvClKmClose.setBackgroundResource(R.drawable.shape_mb_bt_ok);
|
isShowOpenTip = false;
|
getDB().clKmTip.setVisibility(View.VISIBLE);
|
}
|
|
@Override
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
if(keyCode == KeyEvent.KEYCODE_BACK){
|
if(checkOpen()){
|
return true;
|
}
|
}
|
return super.onKeyDown(keyCode, event);
|
}
|
|
/**
|
* 开门返回
|
* @param e
|
*/
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
public void ManageOpenGridResultEvent(ManageOpenGridResultEvent e){
|
if(!isFinishing()){
|
//校验是否已全开
|
List<CabinetGridDo> gridDos = DaoManager.getCabinetGridDao().loadAll();
|
List<String> msgList = new ArrayList<>();
|
for(String key:waitOpenMap.keySet()){
|
msgList.add(waitOpenMap.get(key));
|
}
|
EventBus.getDefault().post(new HttpEvent("总共要打开数:"+waitOpenMap.size()));
|
for(CabinetGridDo d:gridDos){
|
if(d.getIsOpen()==1) {
|
EventBus.getDefault().post(new HttpEvent("打开了:"+d.getGridKey()));
|
waitOpenMap.remove(d.getGridKey());
|
}
|
}
|
if(waitOpenMap.size()==0){
|
if(getDB().clKmTip.getVisibility()==View.VISIBLE){
|
//已弹出就不提示了
|
return;
|
}
|
EventBus.getDefault().post(new HttpEvent("全部打开了:"+waitOpenMap.size()));
|
//打开成功
|
if(isAllOpen){
|
getDB().tvClKm2.setText("一键全开成功,领还后请关门");
|
}else {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
msgList.sort((a,b)->{
|
return a.compareTo(b);
|
});
|
}
|
StringBuilder sb = new StringBuilder();
|
for(String key:msgList){
|
if(sb.length()>0){
|
sb.append("、");
|
}
|
sb.append(key);
|
}
|
getDB().tvClKm2.setText(getTipText2("钥匙柜",sb.toString(),"开门成功,领还后请关门"), TextView.BufferType.SPANNABLE);
|
}
|
getDB().imgClKm1.setImageResource(R.mipmap.ic_success);
|
getDB().tvClKm1.setText("柜门打开成功");
|
}else {
|
//部分开门失败
|
EventBus.getDefault().post(new HttpEvent("部分打开了:"+waitOpenMap.size()));
|
msgList.clear();
|
for (String key : waitOpenMap.keySet()) {
|
msgList.add(waitOpenMap.get(key));
|
}
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
msgList.sort((a, b) -> {
|
return a.compareTo(b);
|
});
|
}
|
StringBuilder sb = new StringBuilder();
|
for (String key : msgList) {
|
if (sb.length() > 0) {
|
sb.append("、");
|
}
|
sb.append(key);
|
}
|
getDB().imgClKm1.setImageResource(R.mipmap.ic_jjfail);
|
getDB().tvClKm1.setText("柜门打开失败");
|
getDB().tvClKm2.setText(getTipText2("钥匙柜",sb.toString(),"开门失败"), TextView.BufferType.SPANNABLE);
|
}
|
getDB().tvClKmClose.setText("60s 自动关闭");
|
getDB().tvClKmClose.setTextColor(0xff279baa);
|
getDB().tvClKmClose.setBackgroundResource(R.drawable.shape_mb_bg01);
|
openTipDownCount = 60;
|
isShowOpenTip = true;
|
getDB().clKmTip.setVisibility(View.VISIBLE);
|
|
if(!isAllOpen) {
|
//清除已选择的
|
List<ManageKeyCabinetBean> datas = adapter.getListData();
|
for (ManageKeyCabinetBean bean : datas) {
|
if (bean.getIsSelected().get()) {
|
String key = SportUtils.intToHex(Integer.parseInt(bean.getBoardCode())) +
|
SportUtils.intToHex(Integer.parseInt(bean.getChannelCode()));
|
if (!waitOpenMap.containsKey(key)) {
|
bean.getIsSelected().set(false);
|
}
|
}
|
}
|
}
|
waitOpenMap.clear();
|
}
|
}
|
|
/**
|
* 关门
|
* @param e
|
*/
|
@Subscribe(threadMode= ThreadMode.MAIN)
|
public void CloseGridOneResultEvent(CloseGridOneResultEvent e){
|
if(!isFinishing()){
|
//校验卡号
|
CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(e.getKey());
|
if(gridDo!=null){
|
//校验钥匙是否匹配
|
if(gridDo.getGridKey()==null){
|
if(!TextUtils.isEmpty(gridDo.getCurKeyCode())){
|
//未绑定的存放了钥匙
|
showKeyErrTip(gridDo);
|
//开门
|
EventBus.getDefault().post(new OpenGridEvent(Integer.parseInt(e.getKey().substring(2,4), 16)+"",
|
Integer.parseInt(e.getKey().substring(0,2), 16)+""));
|
return;
|
}
|
}else {
|
if(!TextUtils.isEmpty(gridDo.getCurKeyCode())){
|
if(!gridDo.getCurKeyCode().equals(gridDo.getKeyCode())){
|
//钥匙不匹配
|
showKeyErrTip(gridDo);
|
//开门
|
EventBus.getDefault().post(new OpenGridEvent(Integer.parseInt(e.getKey().substring(2,4), 16)+"",
|
Integer.parseInt(e.getKey().substring(0,2), 16)+""));
|
return;
|
}
|
}
|
}
|
getVM().closeGrid(gridDo);
|
}
|
}
|
}
|
}
|