From 338e7ed513d21d1468c0908fdca2ea4097ee0621 Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期三, 10 十二月 2025 18:42:42 +0800
Subject: [PATCH] 指纹钥匙柜

---
 keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java |  903 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 822 insertions(+), 81 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 55e1458..ca5959f 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
@@ -9,21 +9,46 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.SystemClock;
+import android.text.Editable;
+import android.text.SpannableString;
+import android.text.Spanned;
 import android.text.TextUtils;
+import android.text.TextWatcher;
+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.dao.DaoManager;
+import com.doumee.keyCabinet.dao.FingerPrintDo;
 import com.doumee.keyCabinet.databinding.FaceActivityBinding;
+import com.doumee.keyCabinet.event.FaceStatusChangeEvent;
+import com.doumee.keyCabinet.event.HttpEvent;
+import com.doumee.keyCabinet.event.JiujinBeginEvent;
+import com.doumee.keyCabinet.event.JiujinResultEvent;
+import com.doumee.keyCabinet.event.RefreshFingerEvent;
 import com.doumee.keyCabinet.event.TimeClockEvent;
+import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity;
 import com.doumee.keyCabinet.utils.BraceletLogUtils;
 import com.doumee.keyCabinet.utils.face.FaceUtils;
 import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig;
+import com.doumee.keyCabinet.utils.usb.DevComm;
+import com.doumee.keyCabinet.utils.usb.IUsbConnState;
 import com.doumee.lib_coremodel.bean.event.ActionEventData;
 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.callback.CameraDataCallback;
 import com.example.datalibrary.callback.FaceDetectCallBack;
+import com.example.datalibrary.db.DBManager;
 import com.example.datalibrary.gatecamera.CameraPreviewManager;
 import com.example.datalibrary.gl.view.GlMantleSurfacView;
 import com.example.datalibrary.manager.FaceSDKManager;
@@ -32,8 +57,15 @@
 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 java.util.HashMap;
+import java.util.List;
 
 import dagger.hilt.android.AndroidEntryPoint;
 
@@ -51,6 +83,9 @@
     private GlMantleSurfacView glMantleSurfacView;
     private BDFaceImageConfig bdFaceImageConfig;
     private BDFaceCheckConfig bdFaceCheckConfig;
+    //0锛氬彇锛�1锛氳繕
+    private int flag ;
+    private int status;
 
     @Override
     public int getLayoutId() {
@@ -63,14 +98,217 @@
         normalConfig();
         getDB().setModel(getVM());
         mContext = this;
+        flag = MApplication.getLoginBean().getFlag();
         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
     public void initData(@Nullable Bundle savedInstanceState) {
         //getPermission();
+        initDev();
+    }
+
+    @Override
+    protected void timeChange(String djs) {
+        getDB().tvDjs.setText(djs);
+    }
+
+    private SpannableString getErrPhoneText(){
+        String phone = MApplication.getConfigBean().getLinkPhone();
+        if(phone==null){
+            String text = "濡傛湁闂璇疯仈绯荤鐞嗗憳";
+            SpannableString styledText = new SpannableString(text);
+            styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip3), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+            return styledText;
+        }
+        String text = "濡傛湁闂璇疯仈绯荤鐞嗗憳"+phone;
+        SpannableString styledText = new SpannableString(text);
+        styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip3), 0, text.length()-phone.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        styledText.setSpan(new TextAppearanceSpan(this,R.style.style_tip1), text.length()-phone.length()+1, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        return styledText;
+    }
+
+    private void statusFsm(int toStatus){
+        status = toStatus;
+        isToChose = false;
+        getDB().etEwm.requestFocus();
+        switch (toStatus){
+            case 0:
+                //鍙�-绠$悊鍛樹汉鑴搁獙璇�
+                getDB().tvTitle.setText("绠$悊鍛樿韩浠介獙璇�");
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.VISIBLE);
+                setFaceModel(0);
+                setFingerStatus(1);
+                break;
+            case 10:
+                //鍙�-绠$悊鍛樻寚绾归獙璇�
+                getDB().tvTitle.setText("绠$悊鍛樿韩浠介獙璇�");
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.VISIBLE);
+                setFaceModel(2);
+                setFingerStatus(0);
+                break;
+            case 1:
+                //鍙�-绠$悊鍛樺埛鍗¢獙璇�
+                getDB().etEwm.setText("");
+                getDB().tvTitle.setText("绠$悊鍛樿韩浠介獙璇�");
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.VISIBLE);
+                setFaceModel(2);
+                setFingerStatus(1);
+                break;
+            case 5:
+                //鍙�-鍙告満楠岃瘉鏂瑰紡閫夋嫨椤�
+                getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clZw.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().tvTitle.setText("鍙告満韬唤楠岃瘉");
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.GONE);
+                getDB().clSjXuan.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.VISIBLE);
+                setFaceModel(1);
+                setFingerStatus(1);
+                break;
+            case 11:
+                //鍙�-鍙告満鎸囩汗楠岃瘉
+                getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clSjXuan.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.VISIBLE);
+                setFaceModel(2);
+                setFingerStatus(0);
+                break;
+            case 3:
+                //鍙�-鍙告満鍒峰崱楠岃瘉
+                getDB().etEwm.setText("");
+                getDB().etEwm.requestFocus();
+                getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.GONE);
+                getDB().clSjXuan.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.VISIBLE);
+                setFaceModel(2);
+                setFingerStatus(1);
+                break;
+            case 4:
+                //鍙�-鍙告満閰掔簿妫�娴�
+                getDB().tvTitle.setText("閰掔簿妫�娴�");
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clZw.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 {
+                    ToastView.show(this,"鏈幏鍙栧埌閰掔簿娴撳害鎶ヨ鍊�");
+                    statusFsm(6);
+                }
+                break;
+            case 6:
+                //鍙�-鍙告満閰掔簿妫�娴嬪け璐�
+                //Toast.makeText(mContext, "鍙告満閰掔簿妫�娴嬪け璐�", Toast.LENGTH_SHORT).show();
+                getDB().clJiu.setVisibility(View.GONE);
+                getDB().tvJg1.setText("閰掔簿妫�娴嬫搷浣滀笉褰擄紝璇烽噸鏂版娴�");
+                getDB().clTip1.setVisibility(View.VISIBLE);
+                break;
+            case 7:
+                //杩�-鍙告満浜鸿劯楠岃瘉
+                getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.VISIBLE);
+                setFaceModel(1);
+                setFingerStatus(1);
+                break;
+            case 12:
+                //杩�-鍙告満鎸囩汗楠岃瘉
+                getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+                getDB().clCard.setVisibility(View.GONE);
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clZw.setVisibility(View.VISIBLE);
+                setFaceModel(2);
+                setFingerStatus(0);
+                break;
+            case 8:
+                //杩�-鍙告満鍒峰崱楠岃瘉
+                getDB().etEwm.setText("");
+                getDB().etEwm.requestFocus();
+                getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+                getDB().clFace.setVisibility(View.GONE);
+                getDB().clCard.setVisibility(View.VISIBLE);
+                setFaceModel(2);
+                setFingerStatus(1);
+                break;
+            case 9:
+                //鍙�-鍙告満閰掔簿妫�娴嬪け璐�
+                getDB().clJiu.setVisibility(View.GONE);
+                getDB().tvJg1.setText("閰掔簿妫�娴嬭秴鏍�");
+                getDB().clTip1.setVisibility(View.VISIBLE);
+                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;
+        }
+    }
+
+    private void setFingerStatus(int fs){
+        if(fs==0){
+            //寮�濮嬫娴�
+            identify();
+        }else {
+            //鍏抽棴妫�娴�
+            mBCancel = true;
+        }
     }
 
     private Bitmap bitmap;
@@ -79,8 +317,97 @@
     protected void doRegister(int type, ActionEventData data) {
         switch (type){
             case 1:
-                finish();
+                if(flag==0){
+                    //鍒囨崲鍒扮鐞嗗憳鍒峰崱
+                    if(status==0||status==10){
+                        statusFsm(1);
+                    }else if(status==2||status==11){
+                        statusFsm(3);
+                    }
+                }else {
+                    //杩�-鍙告満鍒峰崱楠岃瘉
+                    statusFsm(8);
+                }
                 break;
+            case 9:
+                //鎸囩汗楠岃瘉
+                if(status==0) {
+                    statusFsm(10);
+                }else {
+                    statusFsm(12);
+                }
+                break;
+            case 10:
+                //鍙告満鎸囩汗楠岃瘉
+                statusFsm(11);
+                break;
+            case 11:
+                //鍒峰崱-->鎸囩汗楠岃瘉
+                if(flag==0){
+                    if(status==1){
+                        statusFsm(10);
+                    }else {
+                        statusFsm(11);
+                    }
+                }else {
+                    //杩�-鍙告満鎸囩汗
+                    statusFsm(12);
+                }
+                break;
+            case 2:
+                //鍒囨崲鍙告満鍒峰崱
+                statusFsm(3);
+                break;
+            case 3:
+                //鍒囨崲鍙告満浜鸿劯
+                statusFsm(2);
+                break;
+            case 4:
+                //鍒囨崲鍒颁汉鑴�
+                if(flag==0){
+                    if(status==1||status==10){
+                        statusFsm(0);
+                    }else if(status==3||status==11){
+                        statusFsm(2);
+                    }
+                }else {
+                    statusFsm(7);
+                }
+                break;
+            case 5:
+                statusFsm(4);
+                break;
+            case 6:
+                //绠$悊鍛榠c鍗℃垚鍔�
+                statusFsm(5);
+                break;
+            case 7:
+                //鍙告満ic鍗℃垚鍔�
+                if(flag==0) {
+                    //鍙�
+                    if(MApplication.getConfigBean()!=null&&MApplication.getConfigBean().getAlcoholStatus()==1) {
+                        //闈為厭绮炬娴�
+                        startActivity(KeyCabinetActivity.class);
+                        finish();
+                    }else {
+                        //閰掔簿妫�娴�
+                        statusFsm(4);
+                    }
+                }else {
+                    //杩�
+                    startActivity(KeyCabinetActivity.class);
+                    finish();
+                }
+                break;
+            case 8:
+                getDB().message.setText(data.getData().get("obj").toString());
+                getDB().message.setVisibility(View.VISIBLE);
+                handler.sendEmptyMessageDelayed(6,2000);
+                getDB().message.invalidate();
+                getDB().message.requestLayout();
+                EventBus.getDefault().post(new HttpEvent("ic鍗�+++++++"+data.getData().get("type").toString()));
+                break;
+
             default:
                 break;
         }
@@ -107,8 +434,58 @@
                 SingleBaseConfig.getBaseConfig().getMirrorVideoRGB() , SingleBaseConfig.getBaseConfig().isOpenGl());
         CameraPreviewManager.getInstance().startPreview(glMantleSurfacView,
                 SingleBaseConfig.getBaseConfig().getRgbVideoDirection() , PREFER_WIDTH, PERFER_HEIGH);
+        getDB().tvJg2.setText(getErrPhoneText(), TextView.BufferType.SPANNABLE);
 
+        //ic鍗¤鍙�
+        getDB().etEwm.requestFocus();
+        getDB().etEwm.setFocusable(true);
+        getDB().etEwm.setShowSoftInputOnFocus(false);
+        hideSoftKeyboard(getDB().etEwm);
+        getDB().etEwm.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+            @Override
+            public void onGlobalLayout() {
+                hideSoftKeyboard(getDB().etEwm);
+            }
+        });
+
+        getDB().etEwm.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                String m = s.toString();
+                if(TextUtils.isEmpty(m)){
+                    return;
+                }
+                if(status!=1&&status!=3&&status!=8){
+                    getDB().etEwm.setText("");
+                    getDB().etEwm.requestFocus();
+                    return;
+                }
+                if(handler.hasMessages(5)){
+                    handler.removeMessages(5);
+                }
+                handler.sendEmptyMessageDelayed(5,500);
+            }
+        });
     }
+
+    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() {
@@ -149,9 +526,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);
             }
         }
@@ -164,27 +539,47 @@
             //System.out.println("==rgbInstance==>onFaceDetectCallback   "+livenessModel);
             // 寮�鍙戞ā寮�
             //isCheckFace = false;
-            if(handler.hasMessages(1)){
-                handler.removeMessages(1);
+            try {
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        if(handler==null){
+                            return;
+                        }
+                        if(handler.hasMessages(1)){
+                            handler.removeMessages(1);
+                        }
+                        checkOpenDebugResult(livenessModel);
+                    }
+                });
+            }catch (Exception e){
+                e.printStackTrace();
+                ToastView.show(MApplication.mContext,"浜鸿劯鎶ラ敊2:"+e.getMessage());
             }
-            checkOpenDebugResult(livenessModel);
+
         }
 
         @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);
-            System.out.println("==isOk==>onTip:"+msg);
+            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);
@@ -200,11 +595,15 @@
         if (livenessModel == null){
             return;
         }
-
-        if (isPause){
-            glMantleSurfacView.onGlDraw(livenessModel.getTrackFaceInfo() ,
-                    livenessModel.getBdFaceImageInstance() ,
-                    FaceOnDrawTexturViewUtil.drawFaceColor(mUser , livenessModel));
+        try {
+            if (isPause){
+                glMantleSurfacView.onGlDraw(livenessModel.getTrackFaceInfo() ,
+                        livenessModel.getBdFaceImageInstance() ,
+                        FaceOnDrawTexturViewUtil.drawFaceColor(mUser , livenessModel));
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            ToastView.show(MApplication.mContext,"浜鸿劯鎶ラ敊1:"+e.getMessage());
         }
     }
 
@@ -217,6 +616,48 @@
                     break;
                 case 1:
                     //isCheckFace = false;
+                    break;
+                case 3:
+                    getDB().clJiujinProgress.setVisibility(View.GONE);
+                    //Toast.makeText(mContext, "閰掔簿妫�鏌ヨ繑鍥�", Toast.LENGTH_SHORT).show();
+                    if(new BigDecimal(MApplication.getConfigBean().getCabinetConfigDataVO().getConcentration())
+                            .compareTo(resultEvent.getConcentration())>=0){
+                        //閰掔簿閫氳繃
+                        getVM().alcoholTestAlarm(resultEvent.getConcentration().toString());
+                        getDB().clJiujinOk.setVisibility(View.VISIBLE);
+                        handler.sendEmptyMessageDelayed(4,1000);
+                    }else {
+                        //閰掔簿涓嶉�氳繃
+                        getVM().alcoholTestAlarm(resultEvent.getConcentration().toString());
+                        //Toast.makeText(mContext, "閰掔簿妫�娴嬭秴鏍�", Toast.LENGTH_SHORT).show();
+                        statusFsm(9);
+                        //鍐嶆娴嬶紝灏嗗0闊冲叧闂�
+                        EventBus.getDefault().post(new JiujinBeginEvent());
+                    }
+                    break;
+                case 4:
+                    startActivity(KeyCabinetActivity.class);
+                    finish();
+                    break;
+                case 5:
+                    String m = getDB().etEwm.getText().toString();
+                    int index = m.indexOf("\r");
+                    if(index!=-1){
+                        m = m.substring(0,index);
+                    }
+                    if(!TextUtils.isEmpty(m)){
+                        getVM().getMemberIdByCode(m,status==1?"0":"1");
+                    }
+                    getDB().etEwm.setText("");
+                    getDB().etEwm.requestFocus();
+                    break;
+                case 6:
+                    getDB().message.setVisibility(View.GONE);
+                    break;
+                case 7:
+                    identify();
+                    break;
+                default:
                     break;
             }
         }
@@ -251,93 +692,114 @@
         handler.removeCallbacksAndMessages(null);
         handler = null;
         dataCallback = null;
-        //CameraPreviewManager.getInstance().destroy();
+        CameraPreviewManager.getInstance().destroy();
         faceDetectCallBack = null;
         glMantleSurfacView = null;
         FaceSDKManager.getInstance().destroy();
+        mBCancel = true;
+        if(mDevComm!=null){
+            mDevComm.CloseComm();
+        }
     }
 
     private int resultCount = 0;
     // ***************寮�鍙戞ā寮忕粨鏋滆緭鍑�*************
     private void checkOpenDebugResult(final LivenessModel livenessModel) {
-        if(isFinishing()){
-            return;
-        }
-        if(handler==null){
-            return;
-        }
-        // 褰撴湭妫�娴嬪埌浜鸿劯UI鏄剧ず
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (livenessModel == null) {
-                    if (isCompareCheck) {
-                        getDB().clFail.setVisibility(View.VISIBLE);
+        try {
+            if (isFinishing()) {
+                return;
+            }
+            if (handler == null) {
+                return;
+            }
+            // 褰撴湭妫�娴嬪埌浜鸿劯UI鏄剧ず
+            if (isToChose) {
+                return;
+            }
+            if (livenessModel == null) {
+                if (isCompareCheck) {
+                        /*getDB().clFail.setVisibility(View.VISIBLE);
                         getDB().tv4.setText(getString(R.string.face_tip2));
-                        handler.sendEmptyMessageDelayed(0,1000);
-                    }
-                    System.out.println("======>浜鸿劯璇嗗埆澶辫触");
-                    return;
+                        handler.sendEmptyMessageDelayed(0,1000);*/
                 }
-                if (livenessModel.isQualityCheck()){
-                    //鏄惁閫氳繃璐ㄩ噺妫�娴�
-                    if (isCompareCheck) {
-                        getDB().clFail.setVisibility(View.VISIBLE);
+                //System.out.println("======>浜鸿劯璇嗗埆澶辫触");
+                return;
+            }
+            if (livenessModel.isQualityCheck()) {
+                //鏄惁閫氳繃璐ㄩ噺妫�娴�
+                if (isCompareCheck) {
+                        /*getDB().clFail.setVisibility(View.VISIBLE);
                         getDB().tv4.setText(getString(R.string.face_tip2));
-                        handler.sendEmptyMessageDelayed(0,1000);
-                    }
-                } else {
-                    User user = livenessModel.getUser();
-                    if (user == null) {
-                        mUser = null;
-                        if (isCompareCheck) {
-                            getDB().clFail.setVisibility(View.VISIBLE);
+                        handler.sendEmptyMessageDelayed(0,1000);*/
+                }
+            } else {
+                User user = livenessModel.getUser();
+                if (user == null) {
+                    mUser = null;
+                    //EventBus.getDefault().post(new HttpEvent("浜鸿劯鐢ㄦ埛妫�娴嬪け璐�------->"+(status==0?"绠$悊鍛樹汉鑴告娴嬶細":"鍙告満浜鸿劯妫�娴嬶細")));
+                    if (isCompareCheck) {
+                            /*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;
-                            }
+                } else {
+                    mUser = user;
+                        /*EventBus.getDefault().post(new HttpEvent("浜鸿劯鐢ㄦ埛------->"+(status==0?"绠$悊鍛樹汉鑴告娴嬶細":"鍙告満浜鸿劯妫�娴嬶細")
+                                +(user.getGroupId().equals("0")?"绠$悊鍛�":"鍙告満")));*/
+                    if (isCompareCheck) {
+                        getDB().clFail.setVisibility(View.GONE);
+                        if (handler.hasMessages(0)) {
+                            handler.removeMessages(0);
                         }
-                        mUser = user;
-                        if (isCompareCheck) {
-                            getDB().clFail.setVisibility(View.GONE);
-                            if(handler.hasMessages(0)) {
-                                handler.removeMessages(0);
-                            }
                             /*textHuanying.setVisibility(View.GONE);
                             userNameLayout.setVisibility(View.VISIBLE);
                             nameImage.setImageResource(R.mipmap.ic_tips_gate_success);
                             nameText.setTextColor(Color.parseColor("#0dc6ff"));
                             nameText.setText(FileUtils.spotString(user.getUserName()) + " 娆㈣繋鎮�");*/
+                    }
+                    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);
+                        //Toast.makeText(mContext, "鏄惁閰掔簿妫�娴嬶細"+MApplication.getConfigBean().getAlcoholStatus(), Toast.LENGTH_SHORT).show();
+                        if (MApplication.getConfigBean() != null && MApplication.getConfigBean().getAlcoholStatus() == 1) {
+                            //闈為厭绮炬娴�
+                            startActivity(KeyCabinetActivity.class);
+                            finish();
+                        } else {
+                            //閰掔簿妫�娴�
+                            EventBus.getDefault().post(new FaceStatusChangeEvent(4));
                         }
-                        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);
-                        }
+                    } else if (status == 7) {
+                        //杩�-鍙告満
+                        MApplication.getLoginBean().setMemberId(Integer.parseInt(user.getUserId()));
+                        MApplication.getLoginBean().setAuthType(0);
+                        startActivity(KeyCabinetActivity.class);
+                        finish();
                     }
                 }
             }
-        });
+        }catch (Exception e){
+            e.printStackTrace();
+            ToastView.show(MApplication.mContext,"浜鸿劯鎶ラ敊锛�"+e.getMessage());
+        }
+    }
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void FaceStatusChangeEvent(FaceStatusChangeEvent e){
+        if(!isFinishing()){
+            statusFsm(e.getStatus());
+        }
     }
 
     boolean isToChose = false;
@@ -354,4 +816,283 @@
         isTimePause = true;
         CameraPreviewManager.getInstance().stopPreview();
     }
+
+    private JiujinResultEvent resultEvent;
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void JiujinResultEvent(JiujinResultEvent e){
+        if(!isFinishing()){
+            if(status!=4&&status!=6){
+                return;
+            }
+            //Toast.makeText(mContext, "閰掔簿妫�娴嬭繑鍥烇細"+e.isOk(), Toast.LENGTH_SHORT).show();
+            if(!e.isOk()){
+                getDB().clJiujinProgress.setVisibility(View.GONE);
+                statusFsm(6);
+            }else {
+                getDB().clJiujinProgress.setVisibility(View.VISIBLE);
+                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);
+            }
+        }
+    }
+
+    /**------------------------鎸囩汗妯″潡--------------------------*/
+
+    private void getUserIdByFingerId(int fingerId){
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                FingerPrintDo printDo = DaoManager.getFingerPrintDao().getByFingerId(fingerId);
+                if(printDo!=null){
+                    List<User> users = FaceApi.getInstance().getAllUserList();
+                    HashMap<String,String> map = new HashMap<>();
+                    for(User u:users){
+                        if(u.getUserId().equals(printDo.getMemberId()+"")){
+                            map.put(u.getGroupId(),"");
+                        }
+                    }
+                    if(status==10){
+                        //鍙�-绠$悊鍛樻寚绾归獙璇�
+                        if(!map.containsKey("0")){
+                            showToast("鎮ㄥ綋鍓嶄笉鏄鐞嗗憳");
+                            handler.sendEmptyMessageDelayed(7,2000);
+                            return;
+                        }
+                        MApplication.getLoginBean().setAutoMemberId(printDo.getMemberId());
+                        EventBus.getDefault().post(new FaceStatusChangeEvent(5));
+                    }else if(status==11){
+                        //鍙�-鍙告満鎸囩汗楠岃瘉
+                        if(!map.containsKey("1")){
+                            showToast("鎮ㄥ綋鍓嶄笉鏄徃鏈�");
+                            handler.sendEmptyMessageDelayed(7,2000);
+                            return;
+                        }
+                        MApplication.getLoginBean().setMemberId(printDo.getMemberId());
+                        MApplication.getLoginBean().setAuthType(3);
+                        if(MApplication.getConfigBean()!=null&&MApplication.getConfigBean().getAlcoholStatus()==1) {
+                            //闈為厭绮炬娴�
+                            startActivity(KeyCabinetActivity.class);
+                            finish();
+                        }else {
+                            //閰掔簿妫�娴�
+                            EventBus.getDefault().post(new FaceStatusChangeEvent(4));
+                        }
+                    }else if(status==12){
+                        //杩�-鍙告満
+                        if(!map.containsKey("1")){
+                            showToast("鎮ㄥ綋鍓嶄笉鏄徃鏈�");
+                            handler.sendEmptyMessageDelayed(7,2000);
+                            return;
+                        }
+                        MApplication.getLoginBean().setMemberId(printDo.getMemberId());
+                        MApplication.getLoginBean().setAuthType(3);
+                        startActivity(KeyCabinetActivity.class);
+                        finish();
+                    }
+                }else {
+                    //鎵句笉鍒帮紝鍒犻櫎鎸囩汗
+                    if(deleteID(fingerId)) {
+                        //缁х画鏌ユ寚绾�
+                        handler.sendEmptyMessageDelayed(7,2000);
+                    }else {
+                        showToast("鏈煡璇㈠埌鐢ㄦ埛");
+                    }
+                }
+            }
+        });
+    }
+
+    private static DevComm mDevComm;
+    //鏄惁缁撴潫褰曞叆
+    private boolean mBCancel = true;
+    private byte[] m_binImage = new byte[1024 * 100];
+    private final IUsbConnState m_IConnectionHandler = new IUsbConnState() {
+        @Override
+        public void onUsbConnected() {
+            //String[] w_strInfo = new String[1];
+            /*if (mDevComm.Run_TestConnection() == DevComm.ERR_SUCCESS) {
+                if (mDevComm.Run_GetDeviceInfo(w_strInfo) == DevComm.ERR_SUCCESS) {
+
+                    getVM().addInfo("杩炴帴usb鎴愬姛");
+                }else {
+                    getVM().addInfo("杩炴帴璁惧澶辫触1锛�" + mDevComm.Run_GetDeviceInfo(w_strInfo));
+                }
+            } else {
+                getVM().addInfo("杩炴帴璁惧澶辫触2锛�" + mDevComm.Run_TestConnection());
+            }*/
+        }
+
+        @Override
+        public void onUsbPermissionDenied() {
+            Toast.makeText(mContext, "鏃犺澶囨潈闄�", Toast.LENGTH_SHORT).show();
+        }
+
+        @Override
+        public void onDeviceNotFound() {
+            Toast.makeText(mContext, "鏈彂鐜版寚绾硅澶�", Toast.LENGTH_SHORT).show();
+        }
+    };
+
+    private void initDev(){
+        mDevComm = new DevComm(this, m_IConnectionHandler);
+        openDevice();
+    }
+    /**
+     * 寮�鍚澶�
+     */
+    private void openDevice() {
+        String[] w_strInfo = new String[1];
+
+        if (mDevComm != null) {
+            if (!mDevComm.IsInit()) {
+                if (mDevComm.OpenComm("USB", 19200) == false) {
+                    EventBus.getDefault().post(new HttpEvent("鍒濆鍖栬澶囧け璐�"));
+                    return;
+                }
+            }
+            if (mDevComm.Run_TestConnection() == DevComm.ERR_SUCCESS) {
+                if (mDevComm.Run_GetDeviceInfo(w_strInfo) == DevComm.ERR_SUCCESS) {
+                    EventBus.getDefault().post(new HttpEvent("寮�鍚澶囨垚鍔�"));
+                } else {
+                    EventBus.getDefault().post(new HttpEvent("杩炴帴璁惧澶辫触3," + mDevComm.Run_GetDeviceInfo(w_strInfo)));
+                }
+            } else {
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        EventBus.getDefault().post(new HttpEvent("杩炴帴璁惧澶辫触4,"+mDevComm.Run_TestConnection()));
+                    }
+                });
+                mDevComm.CloseComm();
+            }
+        }
+    }
+
+    private void identify() {
+        if (!mDevComm.IsInit())
+            return;
+        mBCancel = false;
+        new Thread(new Runnable() {
+            int w_nRet;
+            int[] w_nID = new int[1];
+            int[] w_nLearned = new int[1];
+            int[] w_nWidth = new int[1];
+            int[] w_nHeight = new int[1];
+
+            @Override
+            public void run() {
+
+                while (true) {
+                    if(mBCancel){
+                        //鍋滄
+                        return;
+                    }
+                    if (capturing() < 0)
+                        return;
+                    //鏉惧紑鎵嬫寚
+
+                    // Up Cpatured Image
+                    if (mDevComm.m_nConnected == 2) {
+                        w_nRet = mDevComm.Run_UpImage(0, m_binImage, w_nWidth, w_nHeight);
+
+                        if (w_nRet != DevComm.ERR_SUCCESS) {
+                            showToast(DevComm.GetErrorMsg(w_nRet));
+                            return;
+                        }
+                    }
+
+                    // Create template
+                    w_nRet = mDevComm.Run_Generate(0);
+
+                    if (w_nRet != DevComm.ERR_SUCCESS) {
+                        if (w_nRet == DevComm.ERR_CONNECTION) {
+                            showToast(DevComm.GetErrorMsg(w_nRet));
+                            return;
+                        } else {
+                            SystemClock.sleep(1000);
+                            continue;
+                        }
+                    }
+
+                    // Identify
+                    w_nRet = mDevComm.Run_Search(0, 1, 500, w_nID, w_nLearned);
+                    if(mBCancel){
+                        //鍋滄
+                        return;
+                    }
+                    if (w_nRet == DevComm.ERR_SUCCESS) {
+                        //鎵惧埌浜�
+                        //showToast("鎵惧埌浜嗭紝"+w_nID[0]);
+                        getUserIdByFingerId(w_nID[0]);
+                        break;
+                        //m_strPost = String.format("Result : Success\r\nTemplate No : %d, Learn Result : %d\r\nMatch Time : %dms", w_nID[0], w_nLearned[0], m_nPassedTime);
+                    } else {
+                        //娌℃壘鍒�
+                        showToast("鏈娴嬪埌璇ユ寚绾�");
+                        /*m_strPost = String.format("\r\nMatch Time : %dms", m_nPassedTime);
+                        m_strPost = GetErrorMsg(w_nRet) + m_strPost;*/
+                    }
+                }
+            }
+        }).start();
+    }
+
+    /**
+     * 鑾峰彇鎸囩汗
+     * @return
+     */
+    private int capturing() {
+        int w_nRet;
+        while (true) {
+            if(isFinishing()){
+                break;
+            }
+            w_nRet = mDevComm.Run_GetImage();
+
+            if (w_nRet == DevComm.ERR_CONNECTION) {
+                showToast("閫氫俊閿欒!");
+                return -1;
+            } else if (w_nRet == DevComm.ERR_SUCCESS) {
+                break;
+            }
+            if (mBCancel) {
+                return -1;
+            }
+        }
+        return 0;
+    }
+
+    private boolean deleteID(int fingerId) {
+        int m_nUserID = fingerId;
+        int w_nRet;
+
+        if (!mDevComm.IsInit())
+            return false;
+
+        w_nRet = mDevComm.Run_DelChar(m_nUserID, m_nUserID);
+        if (w_nRet != DevComm.ERR_SUCCESS&&w_nRet!=DevComm.ERR_TMPL_EMPTY) {
+            //鍒犻櫎澶辫触
+            return false;
+        }
+        return true;
+    }
+
+    private void showToast(String msg){
+        if(!isFinishing()){
+            runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    ToastView.show(MApplication.mContext,msg);
+                }
+            });
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3