|  |  |  | 
|---|
|  |  |  | 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.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; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.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; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | lastDownTime1 = System.currentTimeMillis(); | 
|---|
|  |  |  | downCount1++; | 
|---|
|  |  |  | System.out.println(); | 
|---|
|  |  |  | Timber.tag("==>").d(""+downCount1); | 
|---|
|  |  |  | //Timber.tag("==>").d(""+downCount1); | 
|---|
|  |  |  | if(downCount1>4) { | 
|---|
|  |  |  | downCount1=0; | 
|---|
|  |  |  | lastDownTime1=null; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | getDB().tvVersion.setOnClickListener(new View.OnClickListener() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onClick(View v) { | 
|---|
|  |  |  | //todo 临时代码 | 
|---|
|  |  |  | //setJiuConfig(); | 
|---|
|  |  |  | SpUtil.saveString("rbgCameraId","0"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getDB().imgLeft.setOnClickListener(new View.OnClickListener() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void onClick(View v) { | 
|---|
|  |  |  | 
|---|
|  |  |  | protected void onResume() { | 
|---|
|  |  |  | super.onResume(); | 
|---|
|  |  |  | isShowing = true; | 
|---|
|  |  |  | YNHAPI mAPI = YNHAPI.getInstance(); | 
|---|
|  |  |  | mAPI.setNavigationBarVisibility(YNHAPI.NavigationBarVisibility.ALWAYS_INVISIBLE); | 
|---|
|  |  |  | showTime = System.currentTimeMillis(); | 
|---|
|  |  |  | if(!isFaceOk) { | 
|---|
|  |  |  | initLicense(); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private int tipDownCount = 10; | 
|---|
|  |  |  | private int loopDownCount = 30; | 
|---|
|  |  |  | private int loopDownCount = 60; | 
|---|
|  |  |  | private boolean isShowTip; | 
|---|
|  |  |  | @Subscribe | 
|---|
|  |  |  | public void TimeClockEvent(TimeClockEvent e){ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(loopDownCount==0){ | 
|---|
|  |  |  | loopDownCount = SpUtil.getInt("loop_time",30); | 
|---|
|  |  |  | loopDownCount = SpUtil.getInt("loop_time",60); | 
|---|
|  |  |  | //定时拉取基本信息 | 
|---|
|  |  |  | getVM().devLogin(); | 
|---|
|  |  |  | getPermission(); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | loopDownCount--; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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())){ | 
|---|
|  |  |  | //钥匙不一样,开门 | 
|---|
|  |  |  | ToastView.show(MApplication.mContext,gridDo.getCabinetName()+"钥匙存放位置错误"); | 
|---|
|  |  |  | EventBus.getDefault().post(new OpenGridEvent(Integer.parseInt(e.getKey().substring(2,4), 16)+"", | 
|---|
|  |  |  | Integer.parseInt(e.getKey().substring(0,2), 16)+"")); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | if(isShowTip){ | 
|---|
|  |  |  | doRegister(5,null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(isShowing){ | 
|---|
|  |  |  | //在首页关门成功,需调用关门方法 | 
|---|
|  |  |  | getVM().closeGrid(gridDo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private SerialPortModel gridPort; | 
|---|
|  |  |  | private SerialPortReadObserver gridReadObserver = new SerialPortReadObserver() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | if(gridDo!=null){ | 
|---|
|  |  |  | gridDo.setIsOpen("00".equals(open)?1:0); | 
|---|
|  |  |  | gridDo.setUpdateTime(StringUtil.DateToStr(new Date())); | 
|---|
|  |  |  | //todo 去掉 | 
|---|
|  |  |  | EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"=================>更新数据当前钥匙3:"+gridDo.getCurKeyCode())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DaoManager.getCabinetGridDao().update(gridDo); | 
|---|
|  |  |  | EventBus.getDefault().post(new ManageOpenGridResultEvent()); | 
|---|
|  |  |  | if(gridDo.getIsOpen()==0) { | 
|---|
|  |  |  | //开门失败 | 
|---|
|  |  |  | if (isShowing) { | 
|---|
|  |  |  | //首页开门失败,钥匙不对 | 
|---|
|  |  |  | if (!TextUtils.isEmpty(gridDo.getCurKeyCode()) && | 
|---|
|  |  |  | !TextUtils.isEmpty(gridDo.getKeyCode()) && | 
|---|
|  |  |  | !gridDo.getCurKeyCode().equals(gridDo.getKeyCode())) { | 
|---|
|  |  |  | //钥匙不一样,开门 | 
|---|
|  |  |  | ToastView.show(MApplication.mContext, gridDo.getCabinetName() + "钥匙存放位置错误"); | 
|---|
|  |  |  | EventBus.getDefault().post(new OpenGridEvent(Integer.parseInt(gridDo.getGridKey().substring(2, 4), 16) + "", | 
|---|
|  |  |  | Integer.parseInt(gridDo.getGridKey().substring(0, 2), 16) + "")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | EventBus.getDefault().post(new OpenErrEvent(key)); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | //开门成功 | 
|---|
|  |  |  | //开门返回 | 
|---|
|  |  |  | EventBus.getDefault().post(new OpenGridOneResultEvent(key,"00".equals(open)?1:0)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //开门返回 | 
|---|
|  |  |  | EventBus.getDefault().post(new OpenGridOneResultEvent(key,"00".equals(open)?1:0)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else if(data.length()==16){ | 
|---|
|  |  |  | //批量 | 
|---|
|  |  |  | //8A 02 00 00 00 00 11 99 | 
|---|
|  |  |  | 
|---|
|  |  |  | updateList.add(gridDo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | runOnUiThread(() -> { | 
|---|
|  |  |  | getVM().addInfo("批量开门更新库数据:版号:" +bh+","+updateList.size()); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | //todo 去掉 | 
|---|
|  |  |  | CabinetGridDo gridDo = oldMap.get("0101"); | 
|---|
|  |  |  | if(gridDo!=null) { | 
|---|
|  |  |  | EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"=================>更新数据当前钥匙6:" + gridDo.getCurKeyCode())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getVM().updateGrids(updateList); | 
|---|
|  |  |  | EventBus.getDefault().post(new ManageOpenGridResultEvent()); | 
|---|
|  |  |  | 
|---|
|  |  |  | if(gridDo!=null){ | 
|---|
|  |  |  | gridDo.setIsOpen("00".equals(open)?1:0); | 
|---|
|  |  |  | gridDo.setUpdateTime(StringUtil.DateToStr(new Date())); | 
|---|
|  |  |  | //todo 去掉 | 
|---|
|  |  |  | EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"=================>更新数据当前钥匙3:"+gridDo.getCurKeyCode())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DaoManager.getCabinetGridDao().update(gridDo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //关门返回 | 
|---|
|  |  |  | 
|---|
|  |  |  | runOnUiThread(() -> { | 
|---|
|  |  |  | getVM().addInfo("更新库数据:版号:" +bh+","+ addList.size()+","+updateList.size()); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | //todo 去掉 | 
|---|
|  |  |  | CabinetGridDo gridDo = oldMap.get("0101"); | 
|---|
|  |  |  | if(gridDo!=null){ | 
|---|
|  |  |  | EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+ | 
|---|
|  |  |  | "=================>更新数据当前钥匙5:"+gridDo.getCurKeyCode())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | getVM().updateGrids(updateList); | 
|---|
|  |  |  | if(isShowing){ | 
|---|
|  |  |  | 
|---|
|  |  |  | keyPreviousData = data; | 
|---|
|  |  |  | }else if(data.startsWith("CC02")){ | 
|---|
|  |  |  | runOnUiThread(() -> { | 
|---|
|  |  |  | getVM().addInfo("获取到钥匙数据:" + data); | 
|---|
|  |  |  | //getVM().addInfo("获取到钥匙数据:" + data); | 
|---|
|  |  |  | jxKey(data); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | keyPreviousData = null; | 
|---|
|  |  |  | 
|---|
|  |  |  | if(!TextUtils.isEmpty(keyPreviousData)){ | 
|---|
|  |  |  | String data2 = keyPreviousData+data; | 
|---|
|  |  |  | runOnUiThread(() -> { | 
|---|
|  |  |  | getVM().addInfo("获取到钥匙数据:" + data2); | 
|---|
|  |  |  | //getVM().addInfo("获取到钥匙数据:" + data2); | 
|---|
|  |  |  | if(data2.contains("CC01")&&data2.contains("CC02")){ | 
|---|
|  |  |  | String[] sp = data2.split("CC02"); | 
|---|
|  |  |  | if(sp.length==2){ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | runOnUiThread(() -> { | 
|---|
|  |  |  | //getVM().addInfo("获取到酒精检测数据:"+StringUtil.DateToStrSS(new Date())+" " + new String(bytes)); | 
|---|
|  |  |  | getVM().addInfo("获取到酒精检测数据:"+StringUtil.DateToStrSS(new Date())+" " + new String(bytes)); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | String data = new String(bytes); | 
|---|
|  |  |  | runOnUiThread(() -> { | 
|---|
|  |  |  | //getVM().addInfo("获取到酒精检测是否检测失败:" + (data.contains("blow fail"))); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | if(data.contains("blow fail")){ | 
|---|
|  |  |  | //检测失败 | 
|---|
|  |  |  | EventBus.getDefault().post(new JiujinResultEvent(false,null)); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | sendPortHandlerMsg(3,"read"+config.getThreshold(),time+1200); | 
|---|
|  |  |  | 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){ | 
|---|
|  |  |  | 
|---|
|  |  |  | runOnUiThread(new Runnable() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void run() { | 
|---|
|  |  |  | //todo 去掉 | 
|---|
|  |  |  | if(type==2){ | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | getVM().addInfo("发送指令:"+StringUtil.DateToStrSS(new Date())+"==>"+code); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|