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