From c7376f8d1091b70597ba4430a281496b585b386e Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期四, 23 十月 2025 21:58:26 +0800
Subject: [PATCH] 钥匙柜

---
 keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java |  294 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 253 insertions(+), 41 deletions(-)

diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java
index 03b6978..44934c8 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java
@@ -2,7 +2,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
 import androidx.lifecycle.Observer;
 
 import android.os.Bundle;
@@ -10,6 +9,7 @@
 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;
@@ -19,23 +19,28 @@
 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.KeyDoorEvent;
+import com.doumee.keyCabinet.event.CloseGridOneResultEvent;
 import com.doumee.keyCabinet.event.KeyResultEvent;
-import com.doumee.keyCabinet.event.KeyStatusListener;
+import com.doumee.keyCabinet.event.GetKeyStatusEvent;
 import com.doumee.keyCabinet.event.OpenGridEvent;
-import com.doumee.keyCabinet.ui.face.adapter.ErrRcvAdapter;
+import com.doumee.keyCabinet.event.OpenGridOneResultEvent;
 import com.doumee.keyCabinet.ui.keyCabinet.adapter.CabinetRcvAdapter;
-import com.doumee.lib_coremodel.base.BaseActivity;
+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.SpUtil;
+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 java.util.Random;
 
 import dagger.hilt.android.AndroidEntryPoint;
 
@@ -55,18 +60,18 @@
         public void handleMessage(@NonNull Message msg) {
             switch (msg.what){
                 case 0:
-                    if (ysDownCount==4) {
+                    /*if (ysDownCount==4) {
                         //棰嗗彇閽ュ寵鍊掕鏃�
                         doRegister(7,null);
                         ysDownCount--;
                         handler.sendEmptyMessageDelayed(0,1000);
                     }else if (ysDownCount==0) {
                         //棰嗗彇閽ュ寵鍊掕鏃�
-                        doRegister(MApplication.nextBoolean()?5:6,null);
+                        //doRegister(MApplication.nextBoolean()?5:6,null);
                     }else {
                         ysDownCount--;
                         handler.sendEmptyMessageDelayed(0,1000);
-                    }
+                    }*/
                     break;
                 case 1:
 
@@ -84,6 +89,7 @@
 
     @Override
     public void initView(@Nullable Bundle savedInstanceState) {
+        isAddCountTimer = true;
         normalConfig();
         getDB().setModel(getVM());
         flag = MApplication.getLoginBean().getFlag();
@@ -110,6 +116,8 @@
                     changeBtBg();
                     adapter.refreshData(beans);
                     getVM().emptyVisibility.set(View.GONE);
+                    //鏇存柊淇℃伅
+                    updateDao(beans);
                 }else {
                     getVM().emptyVisibility.set(View.VISIBLE);
                 }
@@ -118,22 +126,78 @@
         getVM().getDatas();
     }
 
+    private void updateDao(List<KeyCabinetBean> 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(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);
+            }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);
+        }
+    }
+
     @Override
     protected void timeChange(String djs) {
         getDB().tvDjs.setText(djs);
     }
 
+    private boolean isOpening = false;
     @Override
     protected void doRegister(int type, ActionEventData data) {
+        stopCountTimer();
+        downTime = 30;
         switch (type){
             case 1:
                 if(selectBean==null){
                     Toast.makeText(mContext, "璇烽�夋嫨鏌滈棬", Toast.LENGTH_SHORT).show();
                     return;
                 }
+                if(isOpening){
+                    return;
+                }
+                isOpening = true;
                 //寮�鍚煖闂�
                 getVM().openGridDriver(selectBean);
-                EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(),selectBean.getBoardCode()));
+                downTime = 60;
                 break;
             case 2:
                 getDB().clTip1.setVisibility(View.GONE);
@@ -141,8 +205,10 @@
                     //閲嶆柊寮�闂�
                     EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(), selectBean.getBoardCode()));
                 }
+                downTime = 60;
                 break;
             case 3:
+                isOpening = false;
                 //寮�鍚け璐�
                 getDB().btTip.setText("閲嶆柊寮�闂�");
                 getDB().imgJg1.setImageResource(R.mipmap.ic_jjfail);
@@ -150,8 +216,10 @@
                 getDB().tvJg2.setText(getErrPhoneText(),TextView.BufferType.SPANNABLE);
                 getDB().btTip.setVisibility(View.VISIBLE);
                 getDB().clTip1.setVisibility(View.VISIBLE);
+                getDB().clTip2.setVisibility(View.GONE);
                 break;
             case 4:
+                isOpening = false;
                 //寮�鍚垚鍔�
                 status=1;
                 if("0".equals(flag)) {
@@ -161,9 +229,10 @@
                     getDB().imgTip2.setImageResource(R.mipmap.ic_notclose);
                     getDB().tvTip22.setText("璇峰綊杩橀挜鍖欏悗鍏抽棴鏌滈棬");
                 }
-                getDB().tvTip21.setText(getTipText(selectBean.getCabinetName(),"鏌滈棬鎵撳紑鎴愬姛"), TextView.BufferType.SPANNABLE);
+                getDB().tvTip21.setText(getTipText(selectBean.getCode(),"鏌滈棬鎵撳紑鎴愬姛"), TextView.BufferType.SPANNABLE);
+                getDB().clTip1.setVisibility(View.GONE);
                 getDB().clTip2.setVisibility(View.VISIBLE);
-                EventBus.getDefault().post(new KeyStatusListener(0));
+                EventBus.getDefault().post(new GetKeyStatusEvent());
                 ysDownCount = 8;
                 handler.sendEmptyMessageDelayed(0,1000);
                 break;
@@ -171,18 +240,20 @@
                 //鎻愰啋鍏虫煖闂�
                 getDB().imgTip2.setImageResource(R.mipmap.ic_notclose);
                 getDB().tvTip22.setText("璇峰叧闂煖闂�");
-                getDB().tvTip21.setText(getTipText(selectBean.getCabinetName(),"鏌滈棬鏈叧闂�"), TextView.BufferType.SPANNABLE);
+                getDB().tvTip21.setText(getTipText(selectBean.getCode(),"鏌滈棬鏈叧闂�"), TextView.BufferType.SPANNABLE);
                 getDB().clTip2.setVisibility(View.VISIBLE);
+                getDB().clTip1.setVisibility(View.GONE);
                 break;
             case 5:
                 //鍏抽棬-閽ュ寵棰嗗彇鎴愬姛
                 status = 0;
-                getDB().clTip2.setVisibility(View.GONE);
                 getDB().imgJg1.setImageResource(R.mipmap.ic_success);
                 getDB().tvJg1.setText(getTipText(selectBean.getCarCode(),"閽ュ寵棰嗗彇鎴愬姛"), TextView.BufferType.SPANNABLE);
                 getDB().tvJg2.setText("鏌滈棬宸插叧闂�");
                 getDB().btTip.setVisibility(View.GONE);
                 getDB().clTip1.setVisibility(View.VISIBLE);
+                getDB().clTip2.setVisibility(View.GONE);
+                downTime = 10;
                 break;
             case 6:
                 //鍏抽棬-閽ュ寵棰嗗彇澶辫触
@@ -193,16 +264,27 @@
                 getDB().tvJg2.setText("鏌滈棬宸插叧闂�");
                 getDB().btTip.setVisibility(View.VISIBLE);
                 getDB().clTip1.setVisibility(View.VISIBLE);
+                getDB().clTip2.setVisibility(View.GONE);
+                break;
+            case 10:
+                status = 0;
+                getDB().imgJg1.setImageResource(R.mipmap.ic_jjfail);
+                getDB().tvJg1.setText("閽ュ寵瀛樻斁浣嶇疆閿欒");
+                getDB().tvJg2.setText(getErrPhoneText(),TextView.BufferType.SPANNABLE);
+                getDB().btTip.setVisibility(View.GONE);
+                getDB().clTip1.setVisibility(View.VISIBLE);
+                getDB().clTip2.setVisibility(View.GONE);
                 break;
             case 8:
                 //鍏抽棬-閽ュ寵褰掕繕鎴愬姛
                 status = 0;
-                getDB().clTip2.setVisibility(View.GONE);
                 getDB().imgJg1.setImageResource(R.mipmap.ic_success);
                 getDB().tvJg1.setText(getTipText(selectBean.getCarCode(),"閽ュ寵褰掕繕鎴愬姛"), TextView.BufferType.SPANNABLE);
                 getDB().tvJg2.setText("鏌滈棬宸插叧闂�");
                 getDB().btTip.setVisibility(View.GONE);
                 getDB().clTip1.setVisibility(View.VISIBLE);
+                getDB().clTip2.setVisibility(View.GONE);
+                downTime = 10;
                 break;
             case 9:
                 //鍏抽棬-閽ュ寵褰掕繕澶辫触
@@ -213,10 +295,12 @@
                 getDB().tvJg2.setText(getErrPhoneText(), TextView.BufferType.SPANNABLE);
                 getDB().btTip.setVisibility(View.VISIBLE);
                 getDB().clTip1.setVisibility(View.VISIBLE);
+                getDB().clTip2.setVisibility(View.GONE);
                 break;
             default:
                 break;
         }
+        initCountTimer();
     }
 
     private SpannableString getTipText(String name,String msg){
@@ -244,34 +328,30 @@
         }
     }
 
-    @Subscribe
-    public void KeyDoorEvent(KeyDoorEvent e){
-        if(!isFinishing()){
-            if("0".equals(e.getResult())){
-                //寮�闂ㄦ垚鍔�
-                doRegister(4,null);
-            }else {
-                //澶辫触
-                doRegister(3,null);
-            }
-        }
-    }
-
-    @Subscribe
+    @Subscribe(threadMode= ThreadMode.MAIN)
     public void KeyResultEvent(KeyResultEvent e){
         if(!isFinishing()){
-            if("0".equals(e.getResult())){
-                //鎴愬姛
-                if("0".equals(flag)){
-                    //閽ュ寵鎷胯蛋浜�
-                    //doRegister(5,null);
-                }else {
-                    //閽ュ寵鏀惧叆浜�
-
+            //閽ュ寵鍙樻洿浜�
+            if(selectBean!=null) {
+                String key = SportUtils.intToHex(Integer.parseInt(selectBean.getBoardCode()))
+                        + SportUtils.intToHex(Integer.parseInt(selectBean.getChannelCode()));
+                //鏌ヨ鏌滄牸
+                CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key);
+                if (gridDo != null) {
+                    if(flag==0){
+                        //鍙�
+                        if(TextUtils.isEmpty(gridDo.getKeyCode())){
+                            //绌轰簡
+                            doRegister(7,null);
+                        }
+                    }else {
+                        //杩�
+                        if(!TextUtils.isEmpty(gridDo.getKeyCode())){
+                            //鏈夐挜鍖欎簡
+                            doRegister(7,null);
+                        }
+                    }
                 }
-            }else {
-                //澶辫触
-
             }
         }
     }
@@ -282,4 +362,136 @@
         handler.removeCallbacksAndMessages(null);
         handler = null;
     }
+
+    private String openTime = "";
+    @Subscribe(threadMode= ThreadMode.MAIN)
+    public void OpenGridOneResultEvent(OpenGridOneResultEvent e){
+        if(!isFinishing()){
+            if(selectBean!=null){
+                String key = SportUtils.intToHex(Integer.parseInt(selectBean.getBoardCode()))
+                        +SportUtils.intToHex(Integer.parseInt(selectBean.getChannelCode()));
+                if(key.equals(e.getKey())) {
+                    if (e.getIsOpen()==1) {
+                        //寮�闂ㄦ垚鍔�
+                        if (isOpened) {
+                            return;
+                        }
+                        isOpened = true;
+                        openTime = StringUtil.DateToStr(new Date());
+                        Toast.makeText(mContext, "鎿嶄綔4", Toast.LENGTH_LONG).show();
+                        doRegister(4, null);
+                    } else {
+                        //澶辫触
+                        //濡傛灉鏄挜鍖欎笉瀵圭户缁紑闂�
+                        CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key);
+                        if (gridDo != null) {
+                            if(gridDo.getUpdateTime().compareTo(openTime)<0){
+                                //寮�闂ㄥ墠鏁版嵁锛屼笉鑳戒娇鐢�
+                                EventBus.getDefault().post(new GetKeyStatusEvent());
+                                return;
+                            }
+                            if (!gridDo.getCurKeyCode().equals(selectBean.getKeyCode())) {
+                                //閽ュ寵涓嶅尮閰�
+                                doRegister(10,null);
+                                EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(), selectBean.getBoardCode()));
+                                return;
+                            }
+                        }
+                        doRegister(3, null);
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean isOpened = false;
+    @Subscribe(threadMode= ThreadMode.MAIN)
+    public void CloseGridOneResultEvent(CloseGridOneResultEvent e){
+        if(!isFinishing()){
+            if(selectBean!=null){
+                String key = SportUtils.intToHex(Integer.parseInt(selectBean.getBoardCode()))
+                        +SportUtils.intToHex(Integer.parseInt(selectBean.getChannelCode()));
+                if(key.equals(e.getKey())) {
+                    stopCountTimer();
+                    if(flag==0) {
+                        //棰嗗彇
+                        if (e.getIsOpen() == 0) {
+                            //鍏抽棬鎴愬姛
+                            //鏌ヨ閽ュ寵鍙�
+                            CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key);
+                            if (gridDo != null) {
+                                if(gridDo.getUpdateTime().compareTo(openTime)<0){
+                                    //寮�闂ㄥ墠鏁版嵁锛屼笉鑳戒娇鐢�
+                                    EventBus.getDefault().post(new GetKeyStatusEvent());
+                                    return;
+                                }
+                                //Toast.makeText(mContext, "1:"+gridDo.getKeyCode()+"锛�2:"+selectBean.getKeyCode(), Toast.LENGTH_LONG).show();
+                                if (!TextUtils.isEmpty(gridDo.getCurKeyCode())) {
+                                    if (gridDo.getCurKeyCode().equals(selectBean.getKeyCode())) {
+                                        //棰嗗彇澶辫触
+                                        isOpened = false;
+                                        doRegister(6, null);
+                                        getVM().closeGrid(gridDo);
+                                    }else {
+                                        //閽ュ寵涓嶅尮閰�
+                                        Toast.makeText(mContext, "鎿嶄綔10", Toast.LENGTH_LONG).show();
+                                        doRegister(10,null);
+                                        EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(), selectBean.getBoardCode()));
+                                    }
+                                } else {
+                                    //閽ュ寵鎷胯蛋浜�
+                                    isOpened = false;
+                                    doRegister(5, null);
+                                    getVM().closeGrid(gridDo);
+                                }
+                                if (handler.hasMessages(0)) {
+                                    handler.removeMessages(0);
+                                }
+                            }else {
+                                Toast.makeText(mContext, "鏈煡璇㈠埌", Toast.LENGTH_LONG).show();
+                            }
+                        } else {
+                            //鍏抽棬澶辫触
+                        }
+                    }else {
+                        //褰掕繕
+                        if (e.getIsOpen() == 0) {
+                            //鍏抽棬鎴愬姛
+                            //鏌ヨ閽ュ寵鍙�
+                            CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key);
+                            if (gridDo != null) {
+                                if(gridDo.getUpdateTime().compareTo(openTime)<0){
+                                    //寮�闂ㄥ墠鏁版嵁锛屼笉鑳戒娇鐢�
+                                    EventBus.getDefault().post(new GetKeyStatusEvent());
+                                    return;
+                                }
+                                //Toast.makeText(mContext, "1:"+gridDo.getKeyCode()+"锛�2:"+selectBean.getKeyCode(), Toast.LENGTH_LONG).show();
+                                if (!TextUtils.isEmpty(gridDo.getCurKeyCode())) {
+                                    if (gridDo.getCurKeyCode().equals(selectBean.getKeyCode())) {
+                                        //鐩稿悓褰掕繕鎴愬姛
+                                        isOpened = false;
+                                        doRegister(8, null);
+                                        getVM().closeGrid(gridDo);
+                                    }else {
+                                        //閽ュ寵涓嶅尮閰�
+                                        doRegister(10,null);
+                                        EventBus.getDefault().post(new OpenGridEvent(selectBean.getChannelCode(), selectBean.getBoardCode()));
+                                    }
+                                } else {
+                                    //閽ュ寵鏈綊杩�
+                                    isOpened = false;
+                                    doRegister(9, null);
+                                    getVM().closeGrid(gridDo);
+                                }
+                            }else {
+                                Toast.makeText(mContext, "鏈煡璇㈠埌", Toast.LENGTH_LONG).show();
+                            }
+                        } else {
+                            //鍏抽棬澶辫触
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3