From 81e258e6aa59dafce998b4f41b1271a9f5c9aff5 Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期四, 30 十月 2025 20:07:26 +0800
Subject: [PATCH] 钥匙柜

---
 keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java |  624 ++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 427 insertions(+), 197 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 c248eb2..91128eb 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
@@ -6,8 +6,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
 import android.graphics.drawable.BitmapDrawable;
 import android.hardware.Camera;
+import android.opengl.Visibility;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -19,6 +21,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.WindowManager;
 import android.widget.PopupWindow;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
@@ -30,6 +33,7 @@
 
 import com.alibaba.fastjson.JSON;
 import com.baidu.idl.main.facesdk.model.BDFaceSDKCommon;
+import com.baidu.idl.main.facesdk.utils.StreamUtil;
 import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.DataSource;
@@ -39,30 +43,32 @@
 import com.bumptech.glide.request.target.Target;
 import com.bumptech.glide.request.transition.Transition;
 import com.doumee.keyCabinet.BuildConfig;
-import com.doumee.keyCabinet.base.BannerPicResponsePara;
 import com.doumee.keyCabinet.bean.CabinetConfigDataBean;
 import com.doumee.keyCabinet.bean.DevConfigBean;
 import com.doumee.keyCabinet.bean.FaceUserBean;
-import com.doumee.keyCabinet.bean.LoginBean;
 import com.doumee.keyCabinet.dao.CabinetGridDo;
 import com.doumee.keyCabinet.dao.DaoManager;
 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;
 import com.doumee.keyCabinet.event.HeartEvent;
 import com.doumee.keyCabinet.event.HttpEvent;
+import com.doumee.keyCabinet.event.JiujinBeginEvent;
+import com.doumee.keyCabinet.event.JiujinResultEvent;
 import com.doumee.keyCabinet.event.KeyResultEvent;
 import com.doumee.keyCabinet.event.ManageOpenGridResultEvent;
 import com.doumee.keyCabinet.event.OpenAllGridEvent;
+import com.doumee.keyCabinet.event.OpenErrEvent;
 import com.doumee.keyCabinet.event.OpenGridEvent;
 import com.doumee.keyCabinet.event.OpenGridListEvent;
 import com.doumee.keyCabinet.event.OpenGridOneResultEvent;
-import com.doumee.keyCabinet.event.ReLoginEvent;
 import com.doumee.keyCabinet.event.TimeClockEvent;
 import com.doumee.keyCabinet.ui.face.ActivationActivity;
+import com.doumee.keyCabinet.ui.face.FaceActivity;
 import com.doumee.keyCabinet.ui.keyCabinet.ChangeUrlActivity;
 import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity;
 import com.doumee.keyCabinet.ui.keyCabinet.ManageLoginActivity;
@@ -74,6 +80,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;
@@ -97,18 +104,22 @@
 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.innohi.YNHAPI;
 import com.yanzhenjie.permission.runtime.Permission;
 
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 import org.greenrobot.eventbus.ThreadMode;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -117,6 +128,8 @@
 import java.util.TimerTask;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import dagger.hilt.android.AndroidEntryPoint;
 import timber.log.Timber;
@@ -153,7 +166,7 @@
             if(!isFinishing()){
                 switch (msg.what) {
                     case 0:
-                    //initM();
+                    initM();
                     TimeUtils.updateTimeUi(getVM().dayObs, getVM().timeObs);
                     handler.sendEmptyMessageDelayed(0, 1000);
                     EventBus.getDefault().post(new TimeClockEvent());
@@ -162,8 +175,21 @@
                         getVM().getFaceLD();
                     }
                     getVM().upBraceletLog();*/
+                    case 1:
+                        if(isShowing) {
+                            EventBus.getDefault().post(new OpenGridEvent((String) msg.obj));
+                            handler.sendEmptyMessageDelayed(1, 1000);
+                        }
+                        break;
                     case 2:
-
+                        if(isShowing){
+                            //閲嶆柊鍙戦�侀挜鍖欐煡璇�
+                            //鍙戦�佹煡璇㈤挜鍖欏彿
+                            EventBus.getDefault().post(new GetKeyStatusEvent());
+                            handler.sendEmptyMessageDelayed(2,1200);
+                        }
+                        break;
+                    default:
                         break;
                 }
             }
@@ -182,7 +208,7 @@
         SpUtil.initWH(this);
         normalConfig();
         getDB().setModel(getVM());
-        //initRGBCheck();
+        initRGBCheck();
         handler.sendEmptyMessageDelayed(0, 1000);
         //鍚姩蹇冭烦
         Intent intent = new Intent(MainActivity.this, HeartbeatService.class);
@@ -192,7 +218,6 @@
         startService(intent2);
         getPermission();
         Timber.tag("====>").d(LMobileInfo.getDeviceUniqueId());
-        initPort();
     }
 
     private void initM(){
@@ -207,7 +232,7 @@
         if((availableMemory<400&&showTime!=null&&(System.currentTimeMillis()-showTime>5000))||
                 ("02:00:00".equals(StringUtil.getHM()))){
             //鍙敤鍐呭瓨灏忎簬400M,鎴栬�呮瘡澶╁噷鏅�2鐐癸紝閲嶅惎app
-            restartApp();
+            //restartApp();
         }
     }
 
@@ -262,7 +287,7 @@
                 lastDownTime1 = System.currentTimeMillis();
                 downCount1++;
                 System.out.println();
-                Timber.tag("==>").d(""+downCount1);
+                //Timber.tag("==>").d(""+downCount1);
                 if(downCount1>4) {
                     downCount1=0;
                     lastDownTime1=null;
@@ -288,6 +313,19 @@
                 }
             }
         });
+
+        getDB().imgLeft.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                //todo 涓存椂浠g爜
+                if (getDB().nsv.getVisibility()== View.VISIBLE) {
+                    getDB().nsv.setVisibility(View.GONE);
+                }else {
+                    getDB().nsv.setVisibility(View.VISIBLE);
+                }
+
+            }
+        });
         upErrInfo();
         getVM().devLogin();
         getVM().devHeart();
@@ -299,12 +337,15 @@
                         setBanner(devConfigBean.getBannerList());
                     }
                     setJiuConfig();
+                    initPort();
                 }
             }
         });
     }
 
     private void setJiuConfig(){
+        getVM().addInfo("閰掔簿閰嶇疆锛�"+(MApplication.getConfigBean().getCabinetConfigDataVO()!=null)+
+                ",涓插彛寮�鍚細"+(jiuPort!=null));
         if(MApplication.getConfigBean().getCabinetConfigDataVO()!=null&&
             jiuPort!=null){
             setJiuConfig(0);
@@ -355,50 +396,20 @@
             case 2:
             case 3: {
                 //鏍¢獙鏄惁鐧诲綍
-                /*if(MApplication.getConfigBean().getId()==null){
+                if(MApplication.getConfigBean().getId()==null){
                     Toast.makeText(mContext, "璁惧鏈坊鍔狅紝鏃犳硶鎿嶄綔", Toast.LENGTH_SHORT).show();
                     getVM().devLogin();
                     return;
                 }
-                MApplication.getLoginBean().setFlag(type==2?0:1);
-                startActivity(FaceActivity.class);*/
-                /*if(type==2){
-                    send485(1,"A002010000000003");
-                }else {
-                    send485(1,"A001010000000002");
-                }*/
-                //send485(1,"A001010000000002");
-                //send485(1,"A002010000000003");
-                //startActivity(KeyCabinetActivity.class,b);
                 checkGridStatus(0);
                 List<CabinetGridDo> gridDos = getVM().getOpenGrids();
                 if (gridDos.size() > 0) {
-                    tipDownCount = 10;
-                    isShowTip = true;
-                    getDB().tvDjs.setText(tipDownCount + "s");
-                    StringBuilder sb = new StringBuilder();
-                    for(CabinetGridDo d:gridDos){
-                        if (sb.length()>0) {
-                            sb.append("銆�");
-                        }
-                        String name = d.getCabinetName();
-                        if (TextUtils.isEmpty(name)) {
-                            name = gridDos.get(0).getGridKey();
-                        }
-                        sb.append(name);
-                    }
-
-                    getDB().tvTip22.setText(getTipText(sb.toString()), TextView.BufferType.SPANNABLE);
-                    getDB().clTip.setVisibility(View.VISIBLE);
+                    showUnCloseTip(gridDos);
                     return;
                 }
                 MApplication.setLoginBean(null);
                 MApplication.getLoginBean().setFlag(type == 2 ? 0 : 1);
-                if(type==3){
-                    startActivity(ManageLoginActivity.class);
-                    return;
-                }
-                startActivity(KeyCabinetActivity.class);
+                startActivity(FaceActivity.class);
                 }
                 break;
             case 4:
@@ -408,22 +419,7 @@
             case 5: {
                 List<CabinetGridDo> gridDos = getVM().getOpenGrids();
                 if (gridDos.size() > 0) {
-                    tipDownCount = 10;
-                    isShowTip = true;
-                    getDB().tvDjs.setText(tipDownCount + "s");
-                    StringBuilder sb = new StringBuilder();
-                    for(CabinetGridDo d:gridDos){
-                        if (sb.length()>0) {
-                            sb.append("銆�");
-                        }
-                        String name = d.getCabinetName();
-                        if (TextUtils.isEmpty(name)) {
-                            name = gridDos.get(0).getGridKey();
-                        }
-                        sb.append(name);
-                    }
-                    getDB().tvTip22.setText(getTipText(sb.toString()), TextView.BufferType.SPANNABLE);
-                    getDB().clTip.setVisibility(View.VISIBLE);
+                    showUnCloseTip(gridDos);
                 }else {
                     isShowTip = false;
                     getDB().clTip.setVisibility(View.GONE);
@@ -438,14 +434,45 @@
         }
     }
 
+    private void showUnCloseTip(List<CabinetGridDo> gridDos){
+        tipDownCount = 10;
+        isShowTip = true;
+        getDB().tvDjs.setText(tipDownCount + "s");
+        StringBuilder sb = new StringBuilder();
+        for(CabinetGridDo d:gridDos){
+            if (sb.length()>0) {
+                sb.append("銆�");
+            }
+            String name = d.getCabinetName();
+            if (TextUtils.isEmpty(name)) {
+                name = gridDos.get(0).getGridKey();
+            }
+            sb.append(name);
+        }
+        getDB().tvTip22.setText(getTipText(sb.toString()), TextView.BufferType.SPANNABLE);
+        getDB().tvTip23.setText(getErrPhoneText(), TextView.BufferType.SPANNABLE);
+        getDB().clTip.setVisibility(View.VISIBLE);
+    }
+
+    private SpannableString getErrPhoneText(){
+        String phone = MApplication.getConfigBean().getLinkPhone();
+        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 boolean isShowing = false;
     @Override
     protected void onResume() {
         super.onResume();
         isShowing = true;
+        YNHAPI mAPI = YNHAPI.getInstance();
+        mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.ALWAYS_INVISIBLE);
         showTime = System.currentTimeMillis();
         if(!isFaceOk) {
-            //initLicense();
+            initLicense();
         }
         if(isHavePermission) {
             checkUpdate();
@@ -457,7 +484,9 @@
         }else {
             getDB().banner.stopTurning();
         }
-        unCloseGrid();
+        //妫�鏌ユ墍鏈夋煖鏍奸棬銆侀挜鍖欑姸鎬�
+        checkKeyStatus(0);
+        checkGridStatus(900);
     }
 
     private void unCloseGrid(){
@@ -756,7 +785,63 @@
             waitBeans.clear();
             selectBeans.addAll(userBeans);
             finishCount=0;
-            faceHandler.sendEmptyMessage(0);
+            /*//鍒犻櫎鍏ㄩ儴
+            FaceApi.getInstance().userClean();
+            faceHandler.sendEmptyMessage(0);*/
+
+            HashMap<String,String> uMap = new HashMap<>();
+            for(FaceUserBean d:selectBeans){
+                String key = d.getMemberId().toString()+"_"+d.getGroupId();
+                uMap.put(key,"");
+            }
+            //鍒犻櫎涓嶅瓨鍦ㄧ敤鎴�
+            List<User> users = FaceApi.getInstance().getAllUserList();
+            List<User> dels = new ArrayList<>();
+            for(User u:users){
+                String key = u.getUserId()+"_"+u.getGroupId();
+                if(!uMap.containsKey(key)){
+                    dels.add(u);
+                }
+            }
+            if(dels.size()>0){
+                UserInfoManager.getInstance().deleteUserListInfo(dels,
+                        "", new UserInfoManager.UserInfoListener() {
+                            @Override
+                            public void userListDeleteSuccess() {
+                                // 鐢ㄦ埛鍒楄〃鍒犻櫎鎴愬姛
+                                faceHandler.sendEmptyMessage(0);
+                            }
+
+                            @Override
+                            public void userListDeleteFailure(String message) {
+                                // 鐢ㄦ埛鍒楄〃鍒犻櫎澶辫触
+                                faceHandler.sendEmptyMessage(0);
+                            }
+                        },
+                        new DBLoadListener() {
+                            @Override
+                            public void onStart(int successCount) {
+
+                            }
+
+                            @Override
+                            public void onLoad(int finishCount, int successCount, float progress) {
+
+                            }
+
+                            @Override
+                            public void onComplete(List<User> features, int successCount) {
+
+                            }
+
+                            @Override
+                            public void onFail(int finishCount, int successCount, List<User> features) {
+
+                            }
+                        });
+            }else {
+                faceHandler.sendEmptyMessage(0);
+            }
         }
     }
 
@@ -816,7 +901,7 @@
                                 if (ret == 128) {
                                     Timber.d("==UpdatingFace==>鍥剧墖鐗瑰緛鎶藉彇鎴愬姛: %s", JSON.toJSONString(bean));
                                     User user = new User();
-                                    user.setUserId(bean.getMemberId());
+                                    user.setUserId(bean.getMemberId().toString());
                                     user.setGroupId(bean.getGroupId());
                                     user.setUserName(bean.getMemberName());
                                     user.setImageName(bean.getFaceImg());
@@ -904,7 +989,6 @@
         popupWindow.showAtLocation(getDB().clRoot, Gravity.CENTER, 0, 0);
         RelativeLayout relativeRegister = contentView.findViewById(R.id.relative_register);
         RelativeLayout mPopRelativeManager = contentView.findViewById(R.id.relative_manager);
-        RelativeLayout mPopRelativeCamra = contentView.findViewById(R.id.relative_camra);
         RelativeLayout mRlErr = contentView.findViewById(R.id.rl_err);
         relativeRegister.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -916,12 +1000,6 @@
             @Override
             public void onClick(View v) {
                 startActivity(UserManagerActivity.class);
-            }
-        });
-        mPopRelativeCamra.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                //startActivity();
             }
         });
         mRlErr.setOnClickListener(new View.OnClickListener() {
@@ -946,15 +1024,10 @@
     }
 
     private void initRGBCheck(){
-        if(true){
-            return;
-        }
-        String index = SpUtil.getString("rbgCameraId");
-        if(index==null){
-            index = "0";
-        }
+        String index = SpUtil.getString("rbgCameraId","0");
         setRgbCameraId(Integer.parseInt(index));
         /*if (isSetCameraId()){
+            setRgbCameraId(SingleBaseConfig.getBaseConfig().getRBGCameraId());
             return;
         }
         int mCameraNum = Camera.getNumberOfCameras();
@@ -1005,6 +1078,7 @@
     }
 
     private void setRgbCameraId(int index){
+        getVM().addInfo("璁剧疆鐩告満锛�"+index);
         //Toast.makeText(mContext, "璁剧疆鐩告満"+index, Toast.LENGTH_SHORT).show();
         SpUtil.saveString("rbgCameraId",index+"");
         BraceletLogUtils.saveLog("璁剧疆鐩告満("+index+")");
@@ -1035,14 +1109,21 @@
         }
     }
 
+    private UpdateUtil updateUtil;
     private void checkUpdate(){
         //鐗堟湰鏇存柊
-        new UpdateUtil(this).setShowToast(false).getServerVerCode(new UpdateUtil.VersionCallBack() {
-            @Override
-            public void isNeedUpdate(boolean isUpdate) {
-                isUpdateVersion = isUpdate;
-            }
-        });
+        if(updateUtil==null){
+            updateUtil = new UpdateUtil(this);
+            updateUtil.setShowToast(false);
+        }
+        if(!updateUtil.isShowing()){
+            updateUtil.getServerVerCode(new UpdateUtil.VersionCallBack() {
+                @Override
+                public void isNeedUpdate(boolean isUpdate) {
+                    isUpdateVersion = isUpdate;
+                }
+            });
+        }
     }
 
     private PermissiondDialog permissiondDialog;
@@ -1074,16 +1155,27 @@
     }
 
     private int tipDownCount = 10;
+    private int loopDownCount = 60;
     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",60);
+                //瀹氭椂鎷夊彇鍩烘湰淇℃伅
+                getVM().devLogin();
+                getPermission();
             }else {
-                tipDownCount--;
-                getDB().tvDjs.setText(tipDownCount+"s");
+                loopDownCount--;
             }
         }
     }
@@ -1096,8 +1188,12 @@
     public void OpenGridEvent(OpenGridEvent e){
         if(!isFinishing()){
             //寮�鍚煖闂�
-            String code = "8A"+SportUtils.intToHex(Integer.parseInt(e.getBoardCode()))
-                    +SportUtils.intToHex(Integer.parseInt(e.getChannelCode()))+"11";
+            String key = e.getKey();
+            if(TextUtils.isEmpty(key)) {
+                key = SportUtils.intToHex(Integer.parseInt(e.getBoardCode()))
+                        + SportUtils.intToHex(Integer.parseInt(e.getChannelCode()));
+            }
+            String code = "8A" + key + "11";
             code += SportUtils.getBCC(code);
             send485(0,code);
         }
@@ -1152,36 +1248,11 @@
         }
     }
 
-
-    @Subscribe
-    public void CloseGridOneResultEvent(CloseGridOneResultEvent e){
-        if(!isFinishing()&&isShowing){
-            //鍦ㄩ椤碉紝鏍¢獙鍏抽棬鐨勯挜鍖欐槸鍚﹀尮閰�
-            if (e.getIsOpen() == 0) {
-                //鍏抽棬鎴愬姛
-                //鏌ヨ閽ュ寵鍙�
-                CabinetGridDo gridDo = DaoManager.getCabinetGridDao().getGridByKey(e.getKey());
-                if (gridDo != null) {
-                    getVM().addInfo("姣旇緝閽ュ寵锛氬綋鍓嶏細"+gridDo.getCurKeyCode()+", 鍏宠仈閽ュ寵锛�"+gridDo.getKeyCode());
-                    if(!TextUtils.isEmpty(gridDo.getCurKeyCode())&&
-                            !TextUtils.isEmpty(gridDo.getKeyCode())&&
-                            !gridDo.getCurKeyCode().equals(gridDo.getKeyCode())){
-                        //閽ュ寵涓嶄竴鏍凤紝寮�闂�
-                        Toast.makeText(mContext, "閽ュ寵瀛樻斁浣嶇疆閿欒", Toast.LENGTH_SHORT).show();
-                        EventBus.getDefault().post(new OpenGridEvent(Integer.parseInt(e.getKey().substring(2,4), 16)+"",
-                                Integer.parseInt(e.getKey().substring(0,2), 16)+""));
-                    }else {
-                        //todo 鍏抽棬鎴愬姛
-                        if(isShowTip){
-                            doRegister(5,null);
-                        }
-                        if(isShowing){
-                            //鍦ㄩ椤靛叧闂ㄦ垚鍔燂紝闇�璋冪敤鍏抽棬鏂规硶
-                            getVM().closeGrid(gridDo);
-                        }
-                    }
-                }
-            }
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void JiujinBeginEvent(JiujinBeginEvent e){
+        if(!isFinishing()){
+            //寮�鍚厭绮炬娴�
+            sendPortHandlerMsg(3,"go_wnd:0",0);
         }
     }
 
@@ -1203,6 +1274,9 @@
 
         @Override
         public void onResultBytes(byte[] bytes) {
+            if(isFinishing()){
+                return;
+            }
             if(bytes.length==0){
                 return;
             }
@@ -1238,23 +1312,21 @@
                     });*/
                     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()));
+
                         DaoManager.getCabinetGridDao().update(gridDo);
-                    }
-                    //寮�闂ㄨ繑鍥�
-                    EventBus.getDefault().post(new OpenGridOneResultEvent(key,gridDo.getIsOpen()));
-                    if(!portHandler.hasMessages(1)){
                         EventBus.getDefault().post(new ManageOpenGridResultEvent());
+                        if(gridDo.getIsOpen()==0) {
+                            //寮�闂ㄥけ璐�
+                            EventBus.getDefault().post(new OpenErrEvent(key));
+                        }else {
+                            //寮�闂ㄨ繑鍥�
+                            EventBus.getDefault().post(new OpenGridOneResultEvent(key,"00".equals(open)?1:0));
+                        }
                     }
+
                 }else if(data.length()==16){
                     //鎵归噺
                     //8A 02 00 00 00 00 11 99
@@ -1267,12 +1339,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);
@@ -1281,23 +1348,11 @@
                                 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().insertGrids(addList);
+
                         getVM().updateGrids(updateList);
-                        if(!portHandler.hasMessages(1)){
-                            EventBus.getDefault().post(new ManageOpenGridResultEvent());
-                        }
+                        EventBus.getDefault().post(new ManageOpenGridResultEvent());
                     }catch (Exception exception){
                         runOnUiThread(() -> {
                             getVM().addInfo("鎵归噺寮�闂ㄦ姤閿欙細" +exception.getMessage());
@@ -1311,20 +1366,13 @@
                 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()));
                     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);
@@ -1365,19 +1413,16 @@
                                 gridDo.setIsOpen("1".equals(dm.substring(i-1,i))?0:1);
                                 gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
                                 updateList.add(gridDo);
-                            }else {
-                                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().insertGrids(addList);
+
                         getVM().updateGrids(updateList);
+                        if(isShowing){
+                            unCloseGrid();
+                        }
                     }catch (Exception exception){
                         runOnUiThread(() -> {
                             getVM().addInfo("鎶ラ敊锛�" +exception.getMessage());
@@ -1404,6 +1449,9 @@
 
         @Override
         public void onResultBytes(byte[] bytes) {
+            if(isFinishing()){
+                return;
+            }
             if(bytes.length==0){
                 return;
             }
@@ -1422,7 +1470,7 @@
                 keyPreviousData = data;
             }else if(data.startsWith("CC02")){
                 runOnUiThread(() -> {
-                    getVM().addInfo("鑾峰彇鍒伴挜鍖欐暟鎹�:" + data);
+                    //getVM().addInfo("鑾峰彇鍒伴挜鍖欐暟鎹�:" + data);
                     jxKey(data);
                 });
                 keyPreviousData = null;
@@ -1430,8 +1478,16 @@
                 if(!TextUtils.isEmpty(keyPreviousData)){
                     String data2 = keyPreviousData+data;
                     runOnUiThread(() -> {
-                        getVM().addInfo("鑾峰彇鍒伴挜鍖欐暟鎹�:" + data2);
-                        jxKey(data2);
+                        //getVM().addInfo("鑾峰彇鍒伴挜鍖欐暟鎹�:" + 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;
                 }
@@ -1474,23 +1530,22 @@
                     }else {
                         gridDo.setCurKeyCode("");
                     }
-                    gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
-                    updateList.add(gridDo);
-                }else {
-                    //鏂板
-                    CabinetGridDo gridDo = new CabinetGridDo();
-                    gridDo.setGridKey(key);
-                    if("01".equals(isHaveKey)) {
-                        gridDo.setCurKeyCode(keyCode);
-                    }else {
-                        gridDo.setCurKeyCode("");
+                    if("0101".equals(key)) {
+                        getVM().addInfo(key+" , "+isHaveKey+"  "+keyCode);
+                        getVM().addInfo(key + "璁剧疆閽ュ寵锛�" + gridDo.getCurKeyCode());
                     }
                     gridDo.setUpdateTime(StringUtil.DateToStr(new Date()));
-                    addList.add(gridDo);
+                    updateList.add(gridDo);
                 }
             }
         }
-        getVM().insertGrids(addList);
+        //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());
     }
@@ -1508,12 +1563,30 @@
 
         @Override
         public void onResultBytes(byte[] bytes) {
+            if(isFinishing()){
+                return;
+            }
             if(bytes.length==0){
                 return;
             }
-            runOnUiThread(() -> {
-                getVM().addInfo("鑾峰彇鍒伴厭绮炬娴嬫暟鎹�:" + new String(bytes));
-            });
+            try {
+                runOnUiThread(() -> {
+                    getVM().addInfo("鑾峰彇鍒伴厭绮炬娴嬫暟鎹�:"+StringUtil.DateToStrSS(new Date())+" " + new String(bytes));
+                });
+                String data = new String(bytes);
+                if(data.contains("blow fail")){
+                    //妫�娴嬪け璐�
+                    EventBus.getDefault().post(new JiujinResultEvent(false,null));
+                }else if(data.startsWith("Result:")){
+                    Pattern pattern = Pattern.compile("([0-9]+\\.[0-9]+)");
+                    Matcher matcher = pattern.matcher(data);
+                    if (matcher.find()) {
+                        EventBus.getDefault().post(new JiujinResultEvent(true,new BigDecimal(matcher.group(1))));
+                    }
+                }
+            }catch (Exception e){
+                getVM().addInfo("鑾峰彇鍒伴厭绮炬娴嬫姤閿�:" + e.getMessage());
+            }
         }
     };
     private SerialPortModel chosePort;
@@ -1615,6 +1688,13 @@
         }
     };
 
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void CheckGridStatusEvent(CheckGridStatusEvent e){
+        if(!isFinishing()){
+            checkGridStatus(0);
+        }
+    }
+
     //妫�鏌ユ墍鏈夐棬鐘舵��
     private void checkGridStatus(long time){
         sendPortHandlerMsg(1,"80010033B2",time+100);
@@ -1627,16 +1707,35 @@
         sendPortHandlerMsg(2,"A002010000000003",time+400);
     }
 
+    private String jiu_blow;
+    private String jiu_mic_ad;
+    private String jiu_alarm;
+    private String jiu_unit;
     private void setJiuConfig(long time){
         CabinetConfigDataBean config = MApplication.getConfigBean().getCabinetConfigDataVO();
-        //璁剧疆鍚规皵鏃堕棿
-        sendPortHandlerMsg(3,"blow:"+config.getBlowTime(),time+100);
-        //鍘嬪姏鍊�
-        sendPortHandlerMsg(3,"mic_ad:"+config.getPressure(),time+300);
-        //娴撳害闃堝��
-        sendPortHandlerMsg(3,"alarm:"+config.getConcentration(),time+600);
-        //娴撳害闃堝�煎崟浣� (1=mg/100ml;2=mg/L;3=%BAC)
-        sendPortHandlerMsg(3,"unit:"+config.getThreshold(),time+900);
+        if(!config.getBlowTime().equals(jiu_blow)) {
+            //璁剧疆鍚规皵鏃堕棿
+            jiu_blow = config.getBlowTime();
+            sendPortHandlerMsg(3, "blow:" + config.getBlowTime(), time += 100);
+        }
+        if(!config.getPressure().equals(jiu_mic_ad)) {
+            //鍘嬪姏鍊�
+            jiu_mic_ad = config.getPressure();
+            sendPortHandlerMsg(3, "mic_ad:" + config.getPressure(), time += 300);
+        }
+        if(!config.getConcentration().equals(jiu_alarm)) {
+            //娴撳害闃堝��
+            jiu_alarm = config.getConcentration();
+            sendPortHandlerMsg(3, "alarm:" + config.getConcentration(), time += 300);
+        }
+        if("3".equals(config.getThreshold())){
+            config.setThreshold("0");
+        }
+        if(!config.getThreshold().equals(jiu_unit)) {
+            //娴撳害闃堝�煎崟浣� (1=mg/100ml;2=mg/L;3=%BAC)
+            jiu_unit = config.getThreshold();
+            sendPortHandlerMsg(3, "unit:" + config.getThreshold(), time += 300);
+        }
     }
 
     private void sendPortHandlerMsg(int what,String obj,long time){
@@ -1646,20 +1745,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"))){
@@ -1670,6 +1773,7 @@
                         ,1 , 0,gridReadObserver);
                 boolean isSucc = gridPort.open();
                 if(isSucc) {
+                    isInitPort = true;
                     getVM().addInfo("闂ㄤ覆鍙i摼鎺ユ垚鍔燂細"+path);
                     String msg = isSucc ? "鎴愬姛" : "澶辫触";
                     //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
@@ -1687,6 +1791,7 @@
                         ,1 , 0,keyReadObserver);
                 boolean isSucc = keyPort.open();
                 if(isSucc) {
+                    isInitPort = true;
                     getVM().addInfo("閽ュ寵涓插彛閾炬帴鎴愬姛锛�"+path);
                     String msg = isSucc ? "鎴愬姛" : "澶辫触";
                     //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
@@ -1703,6 +1808,7 @@
                         ,1 , 0,jiuReadObserver);
                 boolean isSucc = jiuPort.open();
                 if(isSucc) {
+                    isInitPort = true;
                     getVM().addInfo("閰掔簿涓插彛閾炬帴鎴愬姛锛�"+path);
                     String msg = isSucc ? "鎴愬姛" : "澶辫触";
                     //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg);
@@ -1789,6 +1895,7 @@
         portHandler.sendEmptyMessageDelayed(0,0);
     }
 
+    private CircularQueue openGridQueue = new CircularQueue();
     private void send485(int type,String code){
         runOnUiThread(new Runnable() {
             @Override
@@ -1798,6 +1905,9 @@
         });
         if(type==0){
             if(gridPort!=null){
+                if(code.startsWith("8A")){
+                    openGridQueue.enqueue(code);
+                }
                 byte[] sendByte = SportUtils.hexToByteArray(code);
                 gridPort.write(sendByte);
             }
@@ -1856,4 +1966,124 @@
         getVM().addInfo("涓插彛鍏ㄩ儴閾炬帴鎴愬姛锛�");
         return true;
     }
+
+    //寮�闂�
+    @Subscribe
+    public void OpenGridOneResultEvent(OpenGridOneResultEvent e){
+        if(!isFinishing()&&isShowing){
+            //寮�闂ㄦ垚鍔燂紝绉婚櫎寮�闂�
+            if(handler.hasMessages(1)){
+                handler.removeMessages(1);
+                getVM().addInfo("==绉婚櫎寮�闂ㄤ换鍔�");
+            }
+        }
+    }
+
+    private Long keyTime;
+    private HashMap<String,String> closeMap = new HashMap<>();
+    /**
+     * 鍏抽棬
+     * @param e
+     */
+    @Subscribe(threadMode= ThreadMode.MAIN)
+    public void CloseGridOneResultEvent(CloseGridOneResultEvent e){
+        if(!isFinishing()&&isShowing){
+            //鍏抽棬鎴愬姛锛岀Щ闄ゅ紑闂�
+            if(handler.hasMessages(1)){
+                handler.removeMessages(1);
+                getVM().addInfo("==绉婚櫎寮�闂ㄤ换鍔�");
+            }
+            closeMap.put(e.getKey(),"");
+            //鍙戦�佹煡璇㈤挜鍖欏彿
+            EventBus.getDefault().post(new GetKeyStatusEvent());
+            keyTime = new Date().getTime()+500;
+            if(handler.hasMessages(2)){
+                handler.removeMessages(2);
+            }
+            handler.sendEmptyMessageDelayed(2,1200);
+        }
+    }
+
+    @Subscribe(threadMode= ThreadMode.MAIN)
+    public void OpenErrEvent(OpenErrEvent e){
+        //寮�闂ㄥけ璐�
+        if(!isFinishing()&&isShowing){
+            //寮�闂�
+            if(handler.hasMessages(1)){
+                handler.removeMessages(1);
+                getVM().addInfo("==绉婚櫎寮�闂ㄤ换鍔�");
+            }
+            EventBus.getDefault().post(new OpenGridEvent(e.getKey()));
+            Message msg = Message.obtain();
+            msg.what=1;
+            msg.obj = e.getKey();
+            handler.sendMessageDelayed(msg,1000);
+        }
+    }
+
+    @Subscribe
+    public void KeyResultEvent(KeyResultEvent e){
+        if(!isFinishing()&&isShowing){
+            //鏍¢獙鏃堕棿
+            if(keyTime==null){
+                return;
+            }
+            if(keyTime!=null&&keyTime>System.currentTimeMillis()){
+                //鏍¢獙杩斿洖鏃堕棿<鍛戒护鏃堕棿
+                return;
+            }
+            if(handler.hasMessages(2)){
+                handler.removeMessages(2);
+            }
+
+            HashMap<String,String> copyMap = new HashMap<>();
+            copyMap.putAll(closeMap);
+            closeMap.clear();
+            //鏍¢獙鍗″彿涓嶅鐨勶紝鐩存帴寮瑰嚭
+            List<CabinetGridDo> gridDos = DaoManager.getCabinetGridDao().loadAll();
+            List<String> keys = new ArrayList<>();
+            StringBuilder sb = new StringBuilder();
+            for(CabinetGridDo gridDo:gridDos){
+                //瑕佸湪鑼冨洿鍐�
+                if(copyMap.containsKey(gridDo.getGridKey())){
+                    boolean isFail = false;
+                    if(TextUtils.isEmpty(gridDo.getGridKey())){
+                        if(!TextUtils.isEmpty(gridDo.getCurKeyCode())&&gridDo.getIsOpen()==0){
+                            //鏈粦瀹氱殑瀛樻斁浜嗛挜鍖�
+                            keys.add(gridDo.getGridKey());
+                            if(sb.length()>0){
+                                sb.append("銆�");
+                            }
+                            sb.append(gridDo.getCabinetName());
+                            isFail = true;
+                        }
+                    }else {
+                        if(!TextUtils.isEmpty(gridDo.getCurKeyCode())){
+                            if(!gridDo.getCurKeyCode().equals(gridDo.getKeyCode())&&gridDo.getIsOpen()==0){
+                                //閽ュ寵涓嶅尮閰�
+                                keys.add(gridDo.getGridKey());
+                                if(sb.length()>0){
+                                    sb.append("銆�");
+                                }
+                                sb.append(gridDo.getCabinetName());
+                                isFail = true;
+                            }
+                        }
+                    }
+                    if(!isFail){
+                        //鍏抽棬鎴愬姛
+                        EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"闂ㄥ叧闂垚鍔�***************************>鐩爣锛�"+gridDo.getKeyCode()+",褰撳墠锛�"+gridDo.getCurKeyCode()));
+                        getVM().closeGrid(gridDo);
+                    }
+                }
+            }
+            if(sb.length()>0){
+                ToastView.show(MApplication.mContext, sb.toString() + "閽ュ寵瀛樻斁浣嶇疆閿欒");
+            }
+            if(keys.size()>0){
+                //寮�闂�
+                EventBus.getDefault().post(new OpenGridListEvent(keys));
+            }
+        }
+    }
 }

--
Gitblit v1.9.3