| | |
| | | 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; |
| | |
| | | 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.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; |
| | |
| | | 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.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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | if(!isFinishing()){ |
| | | switch (msg.what) { |
| | | case 0: |
| | | //initM(); |
| | | initM(); |
| | | TimeUtils.updateTimeUi(getVM().dayObs, getVM().timeObs); |
| | | handler.sendEmptyMessageDelayed(0, 1000); |
| | | EventBus.getDefault().post(new TimeClockEvent()); |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | SpUtil.initWH(this); |
| | | normalConfig(); |
| | | getDB().setModel(getVM()); |
| | | //initRGBCheck(); |
| | | initRGBCheck(); |
| | | handler.sendEmptyMessageDelayed(0, 1000); |
| | | //启动心跳 |
| | | Intent intent = new Intent(MainActivity.this, HeartbeatService.class); |
| | |
| | | startService(intent2); |
| | | getPermission(); |
| | | Timber.tag("====>").d(LMobileInfo.getDeviceUniqueId()); |
| | | initPort(); |
| | | } |
| | | |
| | | private void initM(){ |
| | |
| | | if((availableMemory<400&&showTime!=null&&(System.currentTimeMillis()-showTime>5000))|| |
| | | ("02:00:00".equals(StringUtil.getHM()))){ |
| | | //可用内存小于400M,或者每天凌晨2点,重启app |
| | | restartApp(); |
| | | //restartApp(); |
| | | } |
| | | } |
| | | |
| | |
| | | lastDownTime1 = System.currentTimeMillis(); |
| | | downCount1++; |
| | | System.out.println(); |
| | | Timber.tag("==>").d(""+downCount1); |
| | | //Timber.tag("==>").d(""+downCount1); |
| | | if(downCount1>4) { |
| | | downCount1=0; |
| | | lastDownTime1=null; |
| | |
| | | getDB().tvId.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | startActivity(ManageLoginActivity.class); |
| | | //更改url |
| | | if(lastDownTime2!=null){ |
| | | if(System.currentTimeMillis()-lastDownTime2>1000){ |
| | |
| | | } |
| | | } |
| | | }); |
| | | getDB().tvVersion.setOnClickListener(new View.OnClickListener() { |
| | | |
| | | getDB().imgLeft.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | //todo 临时代码 |
| | | setJiuConfig(); |
| | | if (getDB().nsv.getVisibility()== View.VISIBLE) { |
| | | getDB().nsv.setVisibility(View.GONE); |
| | | }else { |
| | | getDB().nsv.setVisibility(View.VISIBLE); |
| | | } |
| | | |
| | | } |
| | | }); |
| | | upErrInfo(); |
| | |
| | | setBanner(devConfigBean.getBannerList()); |
| | | } |
| | | setJiuConfig(); |
| | | initPort(); |
| | | } |
| | | } |
| | | }); |
| | |
| | | } |
| | | MApplication.setLoginBean(null); |
| | | MApplication.getLoginBean().setFlag(type == 2 ? 0 : 1); |
| | | startActivity(KeyCabinetActivity.class); |
| | | startActivity(FaceActivity.class); |
| | | } |
| | | break; |
| | | case 4: |
| | |
| | | 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(); |
| | |
| | | }else { |
| | | getDB().banner.stopTurning(); |
| | | } |
| | | unCloseGrid(); |
| | | //检查所有柜格门、钥匙状态 |
| | | checkKeyStatus(0); |
| | | checkGridStatus(900); |
| | | } |
| | | |
| | | private void unCloseGrid(){ |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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()); |
| | |
| | | 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 |
| | |
| | | @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() { |
| | |
| | | } |
| | | |
| | | 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(); |
| | |
| | | } |
| | | |
| | | private void setRgbCameraId(int index){ |
| | | getVM().addInfo("设置相机:"+index); |
| | | //Toast.makeText(mContext, "设置相机"+index, Toast.LENGTH_SHORT).show(); |
| | | SpUtil.saveString("rbgCameraId",index+""); |
| | | BraceletLogUtils.saveLog("设置相机("+index+")"); |
| | |
| | | } |
| | | } |
| | | |
| | | 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 = 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--; |
| | | } |
| | | } |
| | | } |
| | |
| | | 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())){ |
| | | //钥匙不一样,开门 |
| | | 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 { |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public void onResultBytes(byte[] bytes) { |
| | | if(isFinishing()){ |
| | | return; |
| | | } |
| | | if(bytes.length==0){ |
| | | return; |
| | | } |
| | |
| | | });*/ |
| | | 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 |
| | |
| | | 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); |
| | |
| | | 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()); |
| | |
| | | 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); |
| | |
| | | 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()); |
| | |
| | | |
| | | @Override |
| | | public void onResultBytes(byte[] bytes) { |
| | | if(isFinishing()){ |
| | | return; |
| | | } |
| | | if(bytes.length==0){ |
| | | return; |
| | | } |
| | |
| | | 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); |
| | | 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; |
| | | } |
| | |
| | | }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()); |
| | | } |
| | |
| | | |
| | | @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; |
| | |
| | | } |
| | | }; |
| | | |
| | | @Subscribe(threadMode = ThreadMode.MAIN) |
| | | public void CheckGridStatusEvent(CheckGridStatusEvent e){ |
| | | if(!isFinishing()){ |
| | | checkGridStatus(0); |
| | | } |
| | | } |
| | | |
| | | //检查所有门状态 |
| | | private void checkGridStatus(long time){ |
| | | sendPortHandlerMsg(1,"80010033B2",time+100); |
| | |
| | | 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){ |
| | |
| | | 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("门串口链接:"+gridPath); |
| | | //getVM().addInfo("门串口链接:"+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"))){ |
| | |
| | | ,1 , 0,gridReadObserver); |
| | | boolean isSucc = gridPort.open(); |
| | | if(isSucc) { |
| | | isInitPort = true; |
| | | getVM().addInfo("门串口链接成功:"+path); |
| | | String msg = isSucc ? "成功" : "失败"; |
| | | //getVM().append("串口 "+ settingBean.getDevicePath() + " -连接"+msg); |
| | |
| | | ,1 , 0,keyReadObserver); |
| | | boolean isSucc = keyPort.open(); |
| | | if(isSucc) { |
| | | isInitPort = true; |
| | | getVM().addInfo("钥匙串口链接成功:"+path); |
| | | String msg = isSucc ? "成功" : "失败"; |
| | | //getVM().append("串口 "+ settingBean.getDevicePath() + " -连接"+msg); |
| | |
| | | ,1 , 0,jiuReadObserver); |
| | | boolean isSucc = jiuPort.open(); |
| | | if(isSucc) { |
| | | isInitPort = true; |
| | | getVM().addInfo("酒精串口链接成功:"+path); |
| | | String msg = isSucc ? "成功" : "失败"; |
| | | //getVM().append("串口 "+ settingBean.getDevicePath() + " -连接"+msg); |
| | |
| | | portHandler.sendEmptyMessageDelayed(0,0); |
| | | } |
| | | |
| | | private CircularQueue openGridQueue = new CircularQueue(); |
| | | private void send485(int type,String code){ |
| | | runOnUiThread(new Runnable() { |
| | | @Override |
| | |
| | | }); |
| | | if(type==0){ |
| | | if(gridPort!=null){ |
| | | if(code.startsWith("8A")){ |
| | | openGridQueue.enqueue(code); |
| | | } |
| | | byte[] sendByte = SportUtils.hexToByteArray(code); |
| | | gridPort.write(sendByte); |
| | | } |
| | |
| | | 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)); |
| | | } |
| | | } |
| | | } |
| | | } |