From 9ccd59974993aa9914daf045aa6f2bbb5152047c Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期二, 28 十月 2025 09:49:08 +0800
Subject: [PATCH] 钥匙柜

---
 keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java |  335 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 205 insertions(+), 130 deletions(-)

diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
index 302f2ad..bcc9095 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
@@ -14,13 +14,19 @@
 import android.text.TextUtils;
 import android.text.style.TextAppearanceSpan;
 import android.view.View;
+import android.view.ViewTreeObserver;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.baidu.idl.main.facesdk.model.BDFaceSDKCommon;
 import com.doumee.keyCabinet.MApplication;
 import com.doumee.keyCabinet.R;
 import com.doumee.keyCabinet.base.MyBaseActivity;
 import com.doumee.keyCabinet.databinding.FaceActivityBinding;
+import com.doumee.keyCabinet.event.FaceStatusChangeEvent;
+import com.doumee.keyCabinet.event.JiujinBeginEvent;
+import com.doumee.keyCabinet.event.JiujinResultEvent;
 import com.doumee.keyCabinet.event.TimeClockEvent;
 import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity;
 import com.doumee.keyCabinet.utils.BraceletLogUtils;
@@ -28,6 +34,7 @@
 import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig;
 import com.doumee.lib_coremodel.bean.event.ActionEventData;
 import com.doumee.lib_coremodel.util.SpUtil;
+import com.doumee.lib_coremodel.util.StringUtil;
 import com.example.datalibrary.callback.CameraDataCallback;
 import com.example.datalibrary.callback.FaceDetectCallBack;
 import com.example.datalibrary.gatecamera.CameraPreviewManager;
@@ -38,8 +45,13 @@
 import com.example.datalibrary.model.LivenessModel;
 import com.example.datalibrary.model.User;
 import com.example.datalibrary.utils.FaceOnDrawTexturViewUtil;
+import com.example.datalibrary.utils.ToastUtils;
 
+import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.math.BigDecimal;
 
 import dagger.hilt.android.AndroidEntryPoint;
 
@@ -73,11 +85,24 @@
         getDB().setModel(getVM());
         mContext = this;
         flag = MApplication.getLoginBean().getFlag();
-        statusFsm(flag==0?0:2);
-        //todo wmf 瑙e紑
-        /*FaceSDKManager.getInstance().initDataBases(this);
-        initFaceCheck();*/
+        FaceSDKManager.getInstance().initDataBases(this);
+        initFaceCheck();
         initView();
+        if(flag==0){
+            if(MApplication.getConfigBean().getDoubleAuth()==1){
+                statusFsm(0);
+            }else {
+                statusFsm(2);
+            }
+        }else {
+            statusFsm(7);
+        }
+        getDB().tvDjs.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                statusFsm(status);
+            }
+        });
     }
 
     @Override
@@ -101,117 +126,103 @@
 
     private void statusFsm(int toStatus){
         status = toStatus;
-        switch (status){
+        isToChose = false;
+        switch (toStatus){
             case 0:
                 //鍙�-绠$悊鍛樹汉鑴搁獙璇�
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("绠$悊鍛樿韩浠介獙璇�");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
-                getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
-                getDB().clRemind.setVisibility(View.VISIBLE);
-                getDB().btSk.setVisibility(View.VISIBLE);
-
-                getDB().clSjRl.setVisibility(View.GONE);
-                getDB().clSjSk.setVisibility(View.GONE);
-                getDB().clTip1.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.VISIBLE);
+                setFaceModel(0);
                 break;
             case 1:
                 //鍙�-绠$悊鍛樺埛鍗¢獙璇�
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("绠$悊鍛樿韩浠介獙璇�");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
-                getDB().tvTip.setText("璇峰皢IC鍗¤创杩戝埛鍗″尯锛屽仠鐣�1-2绉�");
-                getDB().clRemind.setVisibility(View.GONE);
-                getDB().btSk.setVisibility(View.GONE);
-
-                getDB().clSjRl.setVisibility(View.GONE);
-                getDB().clSjSk.setVisibility(View.VISIBLE);
-                getDB().clTip1.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.VISIBLE);
+                setFaceModel(2);
                 break;
             case 5:
                 //鍙�-鍙告満楠岃瘉鏂瑰紡閫夋嫨椤�
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_face);
-                getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
-                getDB().clRemind.setVisibility(View.VISIBLE);
-                getDB().btSk.setVisibility(View.GONE);
-
-                getDB().clSjRl.setVisibility(View.VISIBLE);
-                getDB().clSjSk.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.GONE);
                 getDB().clTip1.setVisibility(View.GONE);
+                getDB().clSjXuan.setVisibility(View.VISIBLE);
+                getDB().clSjXuan.invalidate();
+                getDB().clSjXuan.requestLayout();
                 break;
             case 2:
                 //鍙�-鍙告満浜鸿劯楠岃瘉
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
-                getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
-                getDB().clRemind.setVisibility(View.VISIBLE);
-                getDB().btSk.setVisibility(View.VISIBLE);
-
-                getDB().clSjRl.setVisibility(View.GONE);
-                getDB().clSjSk.setVisibility(View.GONE);
-                getDB().clTip1.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clSjXuan.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.VISIBLE);
+                setFaceModel(1);
                 break;
             case 3:
                 //鍙�-鍙告満鍒峰崱楠岃瘉
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
-                getDB().tvTip.setText("璇峰皢IC鍗¤创杩戝埛鍗″尯锛屽仠鐣�1-2绉�");
-                getDB().clRemind.setVisibility(View.GONE);
-                getDB().btSk.setVisibility(View.GONE);
-
-                getDB().clSjRl.setVisibility(View.GONE);
-                getDB().clSjSk.setVisibility(View.VISIBLE);
-                getDB().clTip1.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clSjXuan.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.VISIBLE);
+                setFaceModel(2);
                 break;
             case 4:
                 //鍙�-鍙告満閰掔簿妫�娴�
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("閰掔簿妫�娴�");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_jiujingjiance);
-                getDB().tvTip.setText("璇锋嬁璧烽厭绮炬娴嬩华鍚规皵");
-                getDB().clRemind.setVisibility(View.GONE);
-                getDB().btSk.setVisibility(View.GONE);
-
-                getDB().clSjRl.setVisibility(View.GONE);
-                getDB().clSjSk.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clSjXuan.setVisibility(View.GONE);
                 getDB().clTip1.setVisibility(View.GONE);
+                getDB().clJiu.setVisibility(View.VISIBLE);
+                getDB().clJiu.invalidate();
+                getDB().clJiu.requestLayout();
+                if(MApplication.getConfigBean()!=null&&MApplication.getConfigBean().getCabinetConfigDataVO()!=null&&
+                        MApplication.getConfigBean().getCabinetConfigDataVO().getConcentration()!=null){
+                    //寮�濮嬫娴�
+                    EventBus.getDefault().post(new JiujinBeginEvent());
+                }else {
+                    ToastUtils.toast(this,"鏈幏鍙栧埌閰掔簿娴撳害鎶ヨ鍊�");
+                    statusFsm(6);
+                }
                 break;
             case 6:
                 //鍙�-鍙告満閰掔簿妫�娴嬪け璐�
+                Toast.makeText(mContext, "鍙告満閰掔簿妫�娴嬪け璐�", Toast.LENGTH_SHORT).show();
+                getDB().clJiu.setVisibility(View.GONE);
                 getDB().clTip1.setVisibility(View.VISIBLE);
                 break;
             case 7:
                 //杩�-鍙告満浜鸿劯楠岃瘉
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
-                getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
-                getDB().clRemind.setVisibility(View.VISIBLE);
-                getDB().btSk.setVisibility(View.VISIBLE);
-
-                getDB().clSjSk.setVisibility(View.GONE);
-                getDB().clSjRl.setVisibility(View.GONE);
-                getDB().clTip1.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.VISIBLE);
+                setFaceModel(1);
                 break;
             case 8:
                 //杩�-鍙告満鍒峰崱楠岃瘉
-                getDB().clLogin.setVisibility(View.VISIBLE);
                 getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
-                getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
-                getDB().tvTip.setText("璇峰皢IC鍗¤创杩戝埛鍗″尯锛屽仠鐣�1-2绉�");
-                getDB().clRemind.setVisibility(View.GONE);
-                getDB().btSk.setVisibility(View.GONE);
-
-                getDB().clSjSk.setVisibility(View.VISIBLE);
-                getDB().clSjRl.setVisibility(View.GONE);
-                getDB().clTip1.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.VISIBLE);
+                setFaceModel(2);
                 break;
             default:
                 break;
+        }
+    }
+
+    private void setFaceModel(int faceModel){
+        if(faceModel==0){
+            //绠$悊鍛�
+            FaceSDKManager.getInstance().setGroupId("0");
+            isToChose = false;
+        }else if(faceModel==1){
+            //鍙告満
+            FaceSDKManager.getInstance().setGroupId("1");
+            isToChose = false;
+        }else {
+            isToChose = true;
         }
     }
 
@@ -222,7 +233,7 @@
         switch (type){
             case 1:
                 //鍒囨崲鍒板埛鍗�
-                if("0".equals(flag)){
+                if(flag==0){
                     if(status==0){
                         statusFsm(1);
                     }else if(status==2){
@@ -242,23 +253,18 @@
                 break;
             case 4:
                 //鍒囨崲鍒颁汉鑴�
-                if("0".equals(flag)){
+                if(flag==0){
                     if(status==1){
-                        statusFsm(5);
+                        statusFsm(0);
                     }else if(status==3){
-                        statusFsm(6);
+                        statusFsm(2);
                     }
                 }else {
-                    startActivity(KeyCabinetActivity.class);
-                    finish();
+                    statusFsm(7);
                 }
-
-                //todo wmf
-                //statusFsm("0".equals(flag)?);
                 break;
             case 5:
-                startActivity(KeyCabinetActivity.class);
-                finish();
+                statusFsm(4);
                 break;
             default:
                 break;
@@ -287,13 +293,32 @@
         CameraPreviewManager.getInstance().startPreview(glMantleSurfacView,
                 SingleBaseConfig.getBaseConfig().getRgbVideoDirection() , PREFER_WIDTH, PERFER_HEIGH);
         getDB().tvJg2.setText(getErrPhoneText(), TextView.BufferType.SPANNABLE);
+
+        //ic鍗¤鍙�
+        getDB().etEwm.requestFocus();
+        getDB().etEwm.setShowSoftInputOnFocus(false);
+        hideSoftKeyboard(getDB().etEwm);
+        getDB().etEwm.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+            @Override
+            public void onGlobalLayout() {
+                hideSoftKeyboard(getDB().etEwm);
+            }
+        });
     }
+
+    private void hideSoftKeyboard(View view) {
+        InputMethodManager imm = (InputMethodManager)
+                getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm != null) {
+            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
+    }
+
 
     @Override
     protected void onResume() {
         super.onResume();
-        //todo wmf 瑙e紑
-        //startTestOpenDebugRegisterFunction();
+        startTestOpenDebugRegisterFunction();
     }
 
     private void startTestOpenDebugRegisterFunction() {
@@ -329,9 +354,7 @@
                 handler.sendEmptyMessageDelayed(1,4000);
                 glMantleSurfacView.setFrame();
                 bdFaceImageConfig.setData(data);
-                //蹇呴』浼氬憳
-                String groupId = "0";
-                FaceSDKManager.getInstance().onDetectCheck(groupId,bdFaceImageConfig, null, null,
+                FaceSDKManager.getInstance().onDetectCheck(bdFaceImageConfig, null, null,
                         bdFaceCheckConfig, faceDetectCallBack);
             }
         }
@@ -352,19 +375,25 @@
 
         @Override
         public void onTip(int code, String msg) {
-            getDB().clFail.setVisibility(View.VISIBLE);
+            if(isToChose){
+                return;
+            }
+            /*getDB().clFail.setVisibility(View.VISIBLE);
             getDB().tv4.setText(msg);
-            handler.sendEmptyMessageDelayed(0,1000);
+            handler.sendEmptyMessageDelayed(0,1000);*/
             System.out.println("==isOk==>onTip:"+msg);
         }
 
         @Override
         public void onFaceDetectDarwCallback(LivenessModel livenessModel) {
             //System.out.println("==rgbInstance==>onFaceDetectDarwCallback");
+            if(isToChose){
+                return;
+            }
             if (isCompareCheck) {
-                getDB().clFail.setVisibility(View.VISIBLE);
+                /*getDB().clFail.setVisibility(View.VISIBLE);
                 getDB().tv4.setText(getString(R.string.face_tip2));
-                handler.sendEmptyMessageDelayed(0,1000);
+                handler.sendEmptyMessageDelayed(0,1000);*/
             }
             // 缁樺埗浜鸿劯妗�
             showFrame(livenessModel);
@@ -397,6 +426,26 @@
                     break;
                 case 1:
                     //isCheckFace = false;
+                    break;
+                case 3:
+                    Toast.makeText(mContext, "閰掔簿妫�鏌ヨ繑鍥�", Toast.LENGTH_SHORT).show();
+                    if(new BigDecimal(MApplication.getConfigBean().getCabinetConfigDataVO().getConcentration())
+                            .compareTo(resultEvent.getConcentration())>=0){
+                        //閰掔簿閫氳繃
+                        getDB().clJiujinOk.setVisibility(View.VISIBLE);
+                        handler.sendEmptyMessageDelayed(4,1000);
+                    }else {
+                        //閰掔簿涓嶉�氳繃
+                        getVM().alcoholTestAlarm("");
+                        Toast.makeText(mContext, "閰掔簿妫�娴嬩笉閫氳繃", Toast.LENGTH_SHORT).show();
+                        statusFsm(6);
+                    }
+                    break;
+                case 4:
+                    startActivity(KeyCabinetActivity.class);
+                    finish();
+                    break;
+                default:
                     break;
             }
         }
@@ -431,11 +480,10 @@
         handler.removeCallbacksAndMessages(null);
         handler = null;
         dataCallback = null;
-        //CameraPreviewManager.getInstance().destroy();
+        CameraPreviewManager.getInstance().destroy();
         faceDetectCallBack = null;
         glMantleSurfacView = null;
-        //todo wmf 瑙e紑
-        //FaceSDKManager.getInstance().destroy();
+        FaceSDKManager.getInstance().destroy();
     }
 
     private int resultCount = 0;
@@ -451,11 +499,14 @@
         runOnUiThread(new Runnable() {
             @Override
             public void run() {
+                if(isToChose) {
+                    return;
+                }
                 if (livenessModel == null) {
                     if (isCompareCheck) {
-                        getDB().clFail.setVisibility(View.VISIBLE);
+                        /*getDB().clFail.setVisibility(View.VISIBLE);
                         getDB().tv4.setText(getString(R.string.face_tip2));
-                        handler.sendEmptyMessageDelayed(0,1000);
+                        handler.sendEmptyMessageDelayed(0,1000);*/
                     }
                     System.out.println("======>浜鸿劯璇嗗埆澶辫触");
                     return;
@@ -463,37 +514,21 @@
                 if (livenessModel.isQualityCheck()){
                     //鏄惁閫氳繃璐ㄩ噺妫�娴�
                     if (isCompareCheck) {
-                        getDB().clFail.setVisibility(View.VISIBLE);
+                        /*getDB().clFail.setVisibility(View.VISIBLE);
                         getDB().tv4.setText(getString(R.string.face_tip2));
-                        handler.sendEmptyMessageDelayed(0,1000);
+                        handler.sendEmptyMessageDelayed(0,1000);*/
                     }
                 } else {
                     User user = livenessModel.getUser();
                     if (user == null) {
                         mUser = null;
                         if (isCompareCheck) {
-                            getDB().clFail.setVisibility(View.VISIBLE);
+                            /*getDB().clFail.setVisibility(View.VISIBLE);
                             getDB().tv4.setText(getString(R.string.face_tip2));
-                            handler.sendEmptyMessageDelayed(0,1000);
+                            handler.sendEmptyMessageDelayed(0,1000);*/
                         }
 
                     } else {
-                        //浼樺厛浼氬憳
-                        if("0".equals(user.getGroupId())){
-
-                        }else {
-                            if (isCompareCheck) {
-                                getDB().clFail.setVisibility(View.VISIBLE);
-                                getDB().tv4.setText(getString(R.string.face_tip2));
-                                handler.sendEmptyMessageDelayed(0,1000);
-                            }
-                            resultCount++;
-                            if (resultCount >= 3) {
-                                resultCount = 0;
-                            }else {
-                                return;
-                            }
-                        }
                         mUser = user;
                         if (isCompareCheck) {
                             getDB().clFail.setVisibility(View.GONE);
@@ -506,19 +541,38 @@
                             nameText.setTextColor(Color.parseColor("#0dc6ff"));
                             nameText.setText(FileUtils.spotString(user.getUserName()) + " 娆㈣繋鎮�");*/
                         }
-                        if(!isToChose) {
-                            isToChose = true;
-                            //璇嗗埆鎴愬姛锛岃烦杞�
-                            Bundle bundle = new Bundle();
-                            bundle.putString("busId", user.getUserId());
-                            bundle.putString("type", "0");
-                            //Toast.makeText(mContext, user.getUserName(), Toast.LENGTH_SHORT).show();
-                            //startActivity(ChoseTicketActivity.class, bundle);
+                        isToChose = true;
+                        //璇嗗埆鎴愬姛锛岃烦杞�
+                        if(status==0){
+                            //鍙�-绠$悊鍛�
+                            MApplication.getLoginBean().setAutoMemberId(Integer.parseInt(user.getUserId()));
+                            //handler.sendEmptyMessageDelayed(7,0);
+                            EventBus.getDefault().post(new FaceStatusChangeEvent(5));
+                        }else if(status==2){
+                            //鍙�-鍙告満
+                            CameraPreviewManager.getInstance().stopPreview();
+                            MApplication.getLoginBean().setMemberId(Integer.parseInt(user.getUserId()));
+                            MApplication.getLoginBean().setAuthType(0);
+                            //handler.sendEmptyMessageDelayed(8,0);
+                            EventBus.getDefault().post(new FaceStatusChangeEvent(4));
+                        }else if(status==7){
+                            //杩�-鍙告満
+                            MApplication.getLoginBean().setMemberId(Integer.parseInt(user.getUserId()));
+                            MApplication.getLoginBean().setAuthType(0);
+                            startActivity(KeyCabinetActivity.class);
+                            finish();
                         }
                     }
                 }
             }
         });
+    }
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void FaceStatusChangeEvent(FaceStatusChangeEvent e){
+        if(!isFinishing()){
+            statusFsm(e.getStatus());
+        }
     }
 
     boolean isToChose = false;
@@ -533,7 +587,28 @@
         super.onPause();
         isPause = false;
         isTimePause = true;
-        //todo wmf 瑙e紑
-        //CameraPreviewManager.getInstance().stopPreview();
+        CameraPreviewManager.getInstance().stopPreview();
+    }
+
+    private JiujinResultEvent resultEvent;
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void JiujinResultEvent(JiujinResultEvent e){
+        if(!isFinishing()){
+            //Toast.makeText(mContext, "閰掔簿妫�娴嬭繑鍥烇細"+e.isOk(), Toast.LENGTH_SHORT).show();
+            if(!e.isOk()){
+                statusFsm(6);
+            }else {
+                if(resultEvent==null){
+                    resultEvent = e;
+                }else if(resultEvent.getConcentration().compareTo(e.getConcentration())<0){
+                    //鍊兼洿澶�
+                    resultEvent = e;
+                }
+                if(handler.hasMessages(3)){
+                    handler.removeMessages(3);
+                }
+                handler.sendEmptyMessageDelayed(3,1000);
+            }
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3