From 8d459194e620a691994fb8226fb08c51a3dd8065 Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期三, 29 十月 2025 21:33:24 +0800
Subject: [PATCH] 钥匙柜

---
 keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java |  175 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 118 insertions(+), 57 deletions(-)

diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
index 0a253eb..13b914e 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
@@ -49,6 +49,7 @@
 import com.doumee.keyCabinet.databinding.MainActivityBinding;
 import com.doumee.keyCabinet.event.CLGridEvent;
 import com.doumee.keyCabinet.event.CLKeyEvent;
+import com.doumee.keyCabinet.event.CheckGridStatusEvent;
 import com.doumee.keyCabinet.event.CloseGridOneResultEvent;
 import com.doumee.keyCabinet.event.GetFacesEvent;
 import com.doumee.keyCabinet.event.GetKeyStatusEvent;
@@ -76,6 +77,7 @@
 import com.doumee.keyCabinet.ui.face.UserManagerActivity;
 import com.doumee.keyCabinet.ui.view.BannerViewImageHolder;
 import com.doumee.keyCabinet.utils.BraceletLogUtils;
+import com.doumee.keyCabinet.utils.CircularQueue;
 import com.doumee.keyCabinet.utils.CrashHandler;
 import com.doumee.keyCabinet.utils.LMobileInfo;
 import com.doumee.keyCabinet.utils.TimeUtils;
@@ -99,11 +101,13 @@
 import com.doumee.lib_coremodel.http.utils.GsonTools;
 import com.doumee.lib_coremodel.util.SpUtil;
 import com.doumee.lib_coremodel.util.StringUtil;
+import com.doumee.lib_coremodel.view.ToastView;
 import com.example.datalibrary.api.FaceApi;
 import com.example.datalibrary.listener.DBLoadListener;
 import com.example.datalibrary.listener.SdkInitListener;
 import com.example.datalibrary.model.ImportFeatureResult;
 import com.example.datalibrary.model.User;
+import com.example.datalibrary.utils.ToastUtils;
 import com.example.datalibrary.view.PreviewTexture;
 import com.yanzhenjie.permission.runtime.Permission;
 
@@ -277,7 +281,6 @@
         getDB().tvId.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                startActivity(ManageLoginActivity.class);
                 //鏇存敼url
                 if(lastDownTime2!=null){
                     if(System.currentTimeMillis()-lastDownTime2>1000){
@@ -469,7 +472,9 @@
         }else {
             getDB().banner.stopTurning();
         }
-        unCloseGrid();
+        //妫�鏌ユ墍鏈夋煖鏍奸棬銆侀挜鍖欑姸鎬�
+        checkKeyStatus(0);
+        checkGridStatus(900);
     }
 
     private void unCloseGrid(){
@@ -951,10 +956,7 @@
     }
 
     private void initRGBCheck(){
-        String index = SpUtil.getString("rbgCameraId");
-        if(!"1".equals(index)){
-            index = "0";
-        }
+        String index = SpUtil.getString("rbgCameraId","0");
         setRgbCameraId(Integer.parseInt(index));
         /*if (isSetCameraId()){
             setRgbCameraId(SingleBaseConfig.getBaseConfig().getRBGCameraId());
@@ -1078,16 +1080,26 @@
     }
 
     private int tipDownCount = 10;
+    private int loopDownCount = 30;
     private boolean isShowTip;
     @Subscribe
     public void TimeClockEvent(TimeClockEvent e){
-        if(isShowTip){
-            if(tipDownCount==0){
-                isShowTip = false;
-                getDB().clTip.setVisibility(View.GONE);
+        if(!isFinishing()) {
+            if(isShowTip){
+                if(tipDownCount==0){
+                    isShowTip = false;
+                    getDB().clTip.setVisibility(View.GONE);
+                }else {
+                    tipDownCount--;
+                    getDB().tvDjs.setText(tipDownCount+"s");
+                }
+            }
+            if(loopDownCount==0){
+                loopDownCount = SpUtil.getInt("loop_time",30);
+                //瀹氭椂鎷夊彇鍩烘湰淇℃伅
+                getVM().devLogin();
             }else {
-                tipDownCount--;
-                getDB().tvDjs.setText(tipDownCount+"s");
+                loopDownCount--;
             }
         }
     }
@@ -1179,7 +1191,7 @@
                             !TextUtils.isEmpty(gridDo.getKeyCode())&&
                             !gridDo.getCurKeyCode().equals(gridDo.getKeyCode())){
                         //閽ュ寵涓嶄竴鏍凤紝寮�闂�
-                        Toast.makeText(mContext, "閽ュ寵瀛樻斁浣嶇疆閿欒", Toast.LENGTH_SHORT).show();
+                        ToastView.show(MApplication.mContext,gridDo.getCabinetName()+"閽ュ寵瀛樻斁浣嶇疆閿欒");
                         EventBus.getDefault().post(new OpenGridEvent(Integer.parseInt(e.getKey().substring(2,4), 16)+"",
                                 Integer.parseInt(e.getKey().substring(0,2), 16)+""));
                     }else {
@@ -1252,23 +1264,33 @@
                     });*/
                     String key = bh+tdh;
                     CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key);
-                    if(gridDo==null){
-                        //鏂板
-                        gridDo = new CabinetGridDo();
-                        gridDo.setIsOpen("00".equals(open)?1:0);
-                        gridDo.setGridKey(key);
-                        gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
-                        DaoManager.getCabinetGridDao().insert(gridDo);
-                    }else {
+                    if(gridDo!=null){
                         gridDo.setIsOpen("00".equals(open)?1:0);
                         gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
+                        //todo 鍘绘帀
+                        EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"=================>鏇存柊鏁版嵁褰撳墠閽ュ寵3锛�"+gridDo.getCurKeyCode()));
+
                         DaoManager.getCabinetGridDao().update(gridDo);
+                        EventBus.getDefault().post(new ManageOpenGridResultEvent());
+                        if(gridDo.getIsOpen()==0) {
+                            //寮�闂ㄥけ璐�
+                            if (isShowing) {
+                                //棣栭〉寮�闂ㄥけ璐ワ紝閽ュ寵涓嶅
+                                if (!TextUtils.isEmpty(gridDo.getCurKeyCode()) &&
+                                        !TextUtils.isEmpty(gridDo.getKeyCode()) &&
+                                        !gridDo.getCurKeyCode().equals(gridDo.getKeyCode())) {
+                                    //閽ュ寵涓嶄竴鏍凤紝寮�闂�
+                                    ToastView.show(MApplication.mContext, gridDo.getCabinetName() + "閽ュ寵瀛樻斁浣嶇疆閿欒");
+                                    EventBus.getDefault().post(new OpenGridEvent(Integer.parseInt(gridDo.getGridKey().substring(2, 4), 16) + "",
+                                            Integer.parseInt(gridDo.getGridKey().substring(0, 2), 16) + ""));
+                                }
+                            }
+                        }else {
+                            //寮�闂ㄦ垚鍔�
+                        }
                     }
                     //寮�闂ㄨ繑鍥�
-                    EventBus.getDefault().post(new OpenGridOneResultEvent(key,gridDo.getIsOpen()));
-                    if(!portHandler.hasMessages(1)){
-                        EventBus.getDefault().post(new ManageOpenGridResultEvent());
-                    }
+                    EventBus.getDefault().post(new OpenGridOneResultEvent(key,"00".equals(open)?1:0));
                 }else if(data.length()==16){
                     //鎵归噺
                     //8A 02 00 00 00 00 11 99
@@ -1281,12 +1303,7 @@
                     for(CabinetGridDo d:gridDos){
                         oldMap.put(d.getGridKey(),d);
                     }
-                    List<CabinetGridDo> addList = new ArrayList<>();
                     List<CabinetGridDo> updateList = new ArrayList<>();
-                    String finalDm = dm;
-                    /*runOnUiThread(() -> {
-                        getVM().addInfo("鎵归噺鏌ヨ杩斿洖锛�" +bh+","+ finalDm+",鎬绘暟鎹細"+oldMap.size());
-                    });*/
                     try {
                         for(int i=1;i<=dm.length();i++){
                             String key = bh+SportUtils.intToHex(i);
@@ -1295,22 +1312,19 @@
                                 gridDo.setIsOpen("1".equals(dm.substring(i-1,i))?0:1);
                                 gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
                                 updateList.add(gridDo);
-                            }/*else {
-                                getVM().addInfo("鏂板key锛�" +key);
-                                CabinetGridDo gridDo = new CabinetGridDo();
-                                gridDo.setGridKey(key);
-                                gridDo.setIsOpen("1".equals(dm.substring(i-1,i))?0:1);
-                                gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
-                                addList.add(gridDo);
-                            }*/
+                            }
                         }
                         runOnUiThread(() -> {
-                            getVM().addInfo("鎵归噺寮�闂ㄦ洿鏂板簱鏁版嵁:鐗堝彿锛�" +bh+","+ addList.size()+","+updateList.size());
+                            getVM().addInfo("鎵归噺寮�闂ㄦ洿鏂板簱鏁版嵁:鐗堝彿锛�" +bh+","+updateList.size());
                         });
-                        getVM().updateGrids(updateList);
-                        if(!portHandler.hasMessages(1)){
-                            EventBus.getDefault().post(new ManageOpenGridResultEvent());
+                        //todo 鍘绘帀
+                        CabinetGridDo gridDo = oldMap.get("0101");
+                        if(gridDo!=null) {
+                            EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"=================>鏇存柊鏁版嵁褰撳墠閽ュ寵6锛�" + gridDo.getCurKeyCode()));
                         }
+
+                        getVM().updateGrids(updateList);
+                        EventBus.getDefault().post(new ManageOpenGridResultEvent());
                     }catch (Exception exception){
                         runOnUiThread(() -> {
                             getVM().addInfo("鎵归噺寮�闂ㄦ姤閿欙細" +exception.getMessage());
@@ -1324,20 +1338,16 @@
                 String open = data.substring(6,8);
                 String key = bh+tdh;
                 CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(key);
-                if(gridDo==null){
-                    //鏂板
-                    gridDo = new CabinetGridDo();
-                    gridDo.setIsOpen("00".equals(open)?1:0);
-                    gridDo.setGridKey(key);
-                    gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
-                    DaoManager.getCabinetGridDao().insert(gridDo);
-                }else {
+                if(gridDo!=null){
                     gridDo.setIsOpen("00".equals(open)?1:0);
                     gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
+                    //todo 鍘绘帀
+                    EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"=================>鏇存柊鏁版嵁褰撳墠閽ュ寵3锛�"+gridDo.getCurKeyCode()));
+
                     DaoManager.getCabinetGridDao().update(gridDo);
                 }
                 //鍏抽棬杩斿洖
-                EventBus.getDefault().post(new CloseGridOneResultEvent(key,gridDo.getIsOpen()));
+                EventBus.getDefault().post(new CloseGridOneResultEvent(key,"00".equals(open)?1:0));
                 if(isShowing&&isShowTip){
                     //淇敼鏄剧ず鎻愰啋
                     doRegister(5,null);
@@ -1383,7 +1393,17 @@
                         runOnUiThread(() -> {
                             getVM().addInfo("鏇存柊搴撴暟鎹�:鐗堝彿锛�" +bh+","+ addList.size()+","+updateList.size());
                         });
+                        //todo 鍘绘帀
+                        CabinetGridDo gridDo = oldMap.get("0101");
+                        if(gridDo!=null){
+                            EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+
+                                    "=================>鏇存柊鏁版嵁褰撳墠閽ュ寵5锛�"+gridDo.getCurKeyCode()));
+                        }
+
                         getVM().updateGrids(updateList);
+                        if(isShowing){
+                            unCloseGrid();
+                        }
                     }catch (Exception exception){
                         runOnUiThread(() -> {
                             getVM().addInfo("鎶ラ敊锛�" +exception.getMessage());
@@ -1440,7 +1460,15 @@
                     String data2 = keyPreviousData+data;
                     runOnUiThread(() -> {
                         getVM().addInfo("鑾峰彇鍒伴挜鍖欐暟鎹�:" + data2);
-                        jxKey(data2);
+                        if(data2.contains("CC01")&&data2.contains("CC02")){
+                            String[] sp = data2.split("CC02");
+                            if(sp.length==2){
+                                jxKey(sp[0]);
+                                jxKey("CC02"+sp[1]);
+                            }
+                        }else {
+                            jxKey(data2);
+                        }
                     });
                     keyPreviousData = null;
                 }
@@ -1483,11 +1511,22 @@
                     }else {
                         gridDo.setCurKeyCode("");
                     }
+                    if("0101".equals(key)) {
+                        getVM().addInfo(key+" , "+isHaveKey+"  "+keyCode);
+                        getVM().addInfo(key + "璁剧疆閽ュ寵锛�" + gridDo.getCurKeyCode());
+                    }
                     gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
                     updateList.add(gridDo);
                 }
             }
         }
+        //todo 鍘绘帀
+        CabinetGridDo gridDo = oldMap.get("0101");
+        if(gridDo!=null) {
+            EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+
+                    "=================>鏇存柊鏁版嵁褰撳墠閽ュ寵7锛�" + gridDo.getCurKeyCode()));
+        }
+
         getVM().updateGrids(updateList);
         EventBus.getDefault().post(new KeyResultEvent());
     }
@@ -1513,11 +1552,11 @@
             }
             try {
                 runOnUiThread(() -> {
-                    getVM().addInfo("鑾峰彇鍒伴厭绮炬娴嬫暟鎹�:"+StringUtil.DateToStrSS(new Date())+" " + new String(bytes));
+                    //getVM().addInfo("鑾峰彇鍒伴厭绮炬娴嬫暟鎹�:"+StringUtil.DateToStrSS(new Date())+" " + new String(bytes));
                 });
                 String data = new String(bytes);
                 runOnUiThread(() -> {
-                    getVM().addInfo("鑾峰彇鍒伴厭绮炬娴嬫槸鍚︽娴嬪け璐�:" + (data.contains("blow fail")));
+                    //getVM().addInfo("鑾峰彇鍒伴厭绮炬娴嬫槸鍚︽娴嬪け璐�:" + (data.contains("blow fail")));
                 });
                 if(data.contains("blow fail")){
                     //妫�娴嬪け璐�
@@ -1633,6 +1672,13 @@
         }
     };
 
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void CheckGridStatusEvent(CheckGridStatusEvent e){
+        if(!isFinishing()){
+            checkGridStatus(0);
+        }
+    }
+
     //妫�鏌ユ墍鏈夐棬鐘舵��
     private void checkGridStatus(long time){
         sendPortHandlerMsg(1,"80010033B2",time+100);
@@ -1666,20 +1712,24 @@
         portHandler.sendMessageDelayed(mc,time);
     }
 
+    private boolean isInitPort;
     //鍒濆鍖栦覆鍙�
     private void initPort(){
         SpUtil.setString("port_grid","/dev/ttyS7");
         SpUtil.setString("port_key","/dev/ttyS1");
         SpUtil.setString("port_jiu","/dev/ttyS2");
         gridPath = SpUtil.getString("port_grid");
-        getVM().addInfo("闂ㄤ覆鍙i摼鎺ワ細"+gridPath);
+        //getVM().addInfo("闂ㄤ覆鍙i摼鎺ワ細"+gridPath);
         keyPath = SpUtil.getString("port_key");
-        getVM().addInfo("閽ュ寵涓插彛閾炬帴锛�"+keyPath);
+        //getVM().addInfo("閽ュ寵涓插彛閾炬帴锛�"+keyPath);
         jiuPath = SpUtil.getString("port_jiu");
-        getVM().addInfo("閰掔簿涓插彛閾炬帴锛�"+jiuPath);
+        //getVM().addInfo("閰掔簿涓插彛閾炬帴锛�"+jiuPath);
         if(!TextUtils.isEmpty(SpUtil.getString("port_grid"))&&
                 !TextUtils.isEmpty(SpUtil.getString("port_key"))&&
                 !TextUtils.isEmpty(SpUtil.getString("port_jiu"))){
+            if(isInitPort){
+                return;
+            }
             xhCount=0;
             closePort(chosePort);
             if(!TextUtils.isEmpty(SpUtil.getString("port_grid"))){
@@ -1690,6 +1740,7 @@
                         ,1 , 0,gridReadObserver);
                 boolean isSucc = gridPort.open();
                 if(isSucc) {
+                    isInitPort = true;
                     getVM().addInfo("闂ㄤ覆鍙i摼鎺ユ垚鍔燂細"+path);
                     String msg = isSucc ? "鎴愬姛" : "澶辫触";
                     //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
@@ -1707,6 +1758,7 @@
                         ,1 , 0,keyReadObserver);
                 boolean isSucc = keyPort.open();
                 if(isSucc) {
+                    isInitPort = true;
                     getVM().addInfo("閽ュ寵涓插彛閾炬帴鎴愬姛锛�"+path);
                     String msg = isSucc ? "鎴愬姛" : "澶辫触";
                     //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
@@ -1723,6 +1775,7 @@
                         ,1 , 0,jiuReadObserver);
                 boolean isSucc = jiuPort.open();
                 if(isSucc) {
+                    isInitPort = true;
                     getVM().addInfo("閰掔簿涓插彛閾炬帴鎴愬姛锛�"+path);
                     String msg = isSucc ? "鎴愬姛" : "澶辫触";
                     //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
@@ -1809,15 +1862,23 @@
         portHandler.sendEmptyMessageDelayed(0,0);
     }
 
+    private CircularQueue openGridQueue = new CircularQueue();
     private void send485(int type,String code){
         runOnUiThread(new Runnable() {
             @Override
             public void run() {
+                //todo 鍘绘帀
+                if(type==2){
+                    return;
+                }
                 getVM().addInfo("鍙戦�佹寚浠わ細"+StringUtil.DateToStrSS(new Date())+"==>"+code);
             }
         });
         if(type==0){
             if(gridPort!=null){
+                if(code.startsWith("8A")){
+                    openGridQueue.enqueue(code);
+                }
                 byte[] sendByte = SportUtils.hexToByteArray(code);
                 gridPort.write(sendByte);
             }

--
Gitblit v1.9.3