From aa8353fe661ee9d3bac0538070458a30af28dc41 Mon Sep 17 00:00:00 2001 From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 19 七月 2017 15:26:28 +0800 Subject: [PATCH] --- VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/SurveillanceMng.java | 19 ++++ VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UnknownSurveillanceQueryItemUtil.java | 53 +++++++++++++ VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java | 10 ++ VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java | 1 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/dialog/SurveillancePhotoDialog.java | 16 +++ VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/CommonVariables.java | 3 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/query/item/UnknownQueryItem.java | 32 ++++++++ VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java | 2 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/sqlite/SurveillanceDao.java | 53 +++++++++--- VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java | 22 +++-- VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/FileUtil.java | 12 ++ 11 files changed, 193 insertions(+), 30 deletions(-) diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java index 057e56b..46a461a 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java @@ -98,5 +98,15 @@ return !connected; } + public boolean networkAvailable() { + boolean connected = false; + ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); + if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || + connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) { + connected = true; + } + return connected; + } + } diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java index d3d13ba..40d4ed5 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java @@ -128,7 +128,6 @@ } initDb(); initSqlMap(); - TestDao.getInstance().test(); } public static MainActivity getInstance() { diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/dialog/SurveillancePhotoDialog.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/dialog/SurveillancePhotoDialog.java index 7849684..90ad6ea 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/dialog/SurveillancePhotoDialog.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/dialog/SurveillancePhotoDialog.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; +import cn.com.basic.face.base.BaseApplication; import cn.com.basic.face.base.MainActivity; import cn.com.basic.face.dialog.wheelview.adapter.BaseWheelAdapter; import cn.com.basic.face.dialog.wheelview.widget.WheelView; @@ -26,6 +27,7 @@ import cn.com.basic.face.util.Constant; import cn.com.basic.face.util.OkClickedListener; import cn.com.basic.face.util.SurveillanceQueryItemUtil; +import cn.com.basic.face.util.UnknownSurveillanceQueryItemUtil; import cn.com.basic.face.widget.surveilance.SurveillancePhotoSelectListView; public class SurveillancePhotoDialog extends PopupWindow { @@ -39,10 +41,18 @@ View view = LayoutInflater.from(MainActivity.getInstance()).inflate(R.layout.dialog_surveillance_photo_select,null); ViewUtils.inject(this, view); - if (CommonVariables.Register.VISITOR_REGISTER_SELECTED) { - dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterVisitorTwoRowsForSelect(selectedId)); + if (BaseApplication.getInstance().networkAvailable()) { + if (CommonVariables.Register.VISITOR_REGISTER_SELECTED) { + dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterVisitorTwoRowsForSelect(selectedId)); + } else { + dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterAttenderTwoRowsForSelect(selectedId)); + } } else { - dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterAttenderTwoRowsForSelect(selectedId)); + if (CommonVariables.Register.VISITOR_REGISTER_SELECTED) { + dialog_surveillance_photo_select_list_view.show(UnknownSurveillanceQueryItemUtil.getInstance().getAllUnregisterVisitorTwoRowsForSelect(selectedId)); + } else { + dialog_surveillance_photo_select_list_view.show(UnknownSurveillanceQueryItemUtil.getInstance().getAllUnregisterAttenderTwoRowsForSelect(selectedId)); + } } setTitleAndList(type); WheelView.WheelViewStyle style = new WheelView.WheelViewStyle(); diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/CommonVariables.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/CommonVariables.java index d426348..76b8c99 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/CommonVariables.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/CommonVariables.java @@ -73,6 +73,7 @@ public static final int VISIT_ATTENDANCE_IN = 5; public static final int VISIT_ATTENDANCE_OUT = 6; public static final int VISIT_ATTENDANCE_BLANK = 7; + public static final int VISIT_UNKNOWN_ITEM_TYPE = 8; public static final int REGISTER_CELL_VIEW_INDEX = 0; public static final int CHECK_IN_CELL_VIEW_INDEX = 1; @@ -112,7 +113,7 @@ public static boolean FACE_SERVER = false; public static boolean ID_CARD = false; - public static boolean EMULATOR = false; + public static boolean EMULATOR = true; public static boolean androidOffline() { return true; diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/query/item/UnknownQueryItem.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/query/item/UnknownQueryItem.java new file mode 100644 index 0000000..ae385d2 --- /dev/null +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/query/item/UnknownQueryItem.java @@ -0,0 +1,32 @@ +package cn.com.basic.face.discern.query.item; + +public class UnknownQueryItem { + + private String rawDataPath; + private String cameraInOrOut; + private String createTime; + + public String getRawDataPath() { + return rawDataPath; + } + + public void setRawDataPath(String rawDataPath) { + this.rawDataPath = rawDataPath; + } + + public String getCameraInOrOut() { + return cameraInOrOut; + } + + public void setCameraInOrOut(String cameraInOrOut) { + this.cameraInOrOut = cameraInOrOut; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } +} diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java index 1b12207..12ade46 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java @@ -7,6 +7,7 @@ import cn.com.basic.face.dialog.CountryDialog; import cn.com.basic.face.dialog.SelectDialog; import cn.com.basic.face.discern.query.condition.DictionaryQueryCondition; +import cn.com.basic.face.service.sqlite.TestDao; import cn.com.basic.face.util.AppApi; import org.xutils.http.RequestParams; @@ -37,6 +38,7 @@ if (!BaseApplication.deviceAvailable) { return; } + TestDao.getInstance().test(); loadCountries(); loadIdTypeList(); loadGenderList(); diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/SurveillanceMng.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/SurveillanceMng.java index b03ea79..48a117c 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/SurveillanceMng.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/SurveillanceMng.java @@ -11,9 +11,12 @@ import cn.com.basic.face.base.MainActivity; import cn.com.basic.face.discern.common.BaseCommonCallBack; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; +import cn.com.basic.face.discern.query.item.UnknownQueryItem; +import cn.com.basic.face.service.sqlite.SurveillanceDao; import cn.com.basic.face.util.AppApi; import cn.com.basic.face.util.FileUtil; import cn.com.basic.face.util.SurveillanceQueryItemUtil; +import cn.com.basic.face.util.UnknownSurveillanceQueryItemUtil; public class SurveillanceMng { @@ -31,7 +34,11 @@ MainActivity.getInstance().runOnUiThread(new Runnable() { @Override public void run() { - SurveillanceQueryItemUtil.getInstance().removeTimeoutItemAndShow(); + if (BaseApplication.getInstance().networkAvailable()) { + SurveillanceQueryItemUtil.getInstance().removeTimeoutItemAndShow(); + } else { + UnknownSurveillanceQueryItemUtil.getInstance().removeTimeoutItemAndShow(); + } } }); Thread.sleep(1000*60*5); @@ -93,4 +100,14 @@ } } + public void sendOfflineUnknownToInternet() { + UnknownQueryItem item = SurveillanceDao.getInstance().readOfflineUnknownFromLocal(); + if (item == null) { + return; + } + + + + } + } diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/sqlite/SurveillanceDao.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/sqlite/SurveillanceDao.java index 1ba34a1..b9b1b38 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/sqlite/SurveillanceDao.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/sqlite/SurveillanceDao.java @@ -1,5 +1,7 @@ package cn.com.basic.face.service.sqlite; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import java.text.SimpleDateFormat; @@ -7,9 +9,13 @@ import java.util.List; import java.util.UUID; +import cn.com.basic.face.base.Config; import cn.com.basic.face.discern.query.item.SurveillancePhotoQueryItem; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; +import cn.com.basic.face.discern.query.item.UnknownQueryItem; import cn.com.basic.face.util.FileUtil; +import cn.com.basic.face.util.SurveillanceQueryItemUtil; +import cn.com.basic.face.util.UnknownSurveillanceQueryItemUtil; public class SurveillanceDao { @@ -17,35 +23,52 @@ public static SurveillanceDao getInstance() { return instance; } - + //companyId //offline_ (headPicture, cameraInOrOut, createTime, visitId) - public void addBitmap(final List<SurveillanceQueryItem> bitmapList, final byte[] byteArray, int len, final String cameraInOrOut, byte[] surveillancePhotoBytes) { - - - for (SurveillanceQueryItem item : bitmapList) { - Bitmap bitmap = item.getBitmap(); - String fileName = UUID.randomUUID().toString()+".bmp"; - FileUtil.writeToFile(fileName, new byte[]{}); - + public void saveOfflineUnknownToLocal(final List<SurveillanceQueryItem> bitmapList, final byte[] rawData, final String cameraInOrOut) { + if (bitmapList == null || bitmapList.size() == 0) { + return; } - + String rawDataFileName = UUID.randomUUID().toString()+""; + FileUtil.writeToFile(rawDataFileName, rawData); String headPicture = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String createTime = sdf.format(new Date()); - String sql = "insert offline_temp(head_picture, camera_in_or_out, create_time, visit_id) values('"+ - headPicture+"','"+ + String sql = "insert offline_unknown(raw_data_path, camera_in_or_out, create_time) values('"+ + rawDataFileName+"','"+ cameraInOrOut+"','"+ createTime+"','"+ - "null" +"')"; - //瀛樺叆鏁版嵁搴� - //鎶婂浘鐗囧瓨鍏ユ湰鍦版枃浠� + "null" +"')"; + SQLiteDatabase db = Config.sqlMap.getDb(); + db.beginTransaction(); + db.execSQL(sql); + db.endTransaction(); + + UnknownSurveillanceQueryItemUtil.getInstance().addItems(bitmapList); + //浜哄憳娉ㄥ唽鍙互閫夋嫨鏈湴鍥剧墖 //鍚屾涓存椂琛� //鍚屾璁垮鐧昏琛� //鍒犻櫎鏈湴鏂囦欢锛堝惊鐜垹闄わ級 + } + public UnknownQueryItem readOfflineUnknownFromLocal() { + UnknownQueryItem item = null; + String sql = "select raw_data,camera_in_or_out,create_time from offline_unknown order by create_time create_time limit 1"; + SQLiteDatabase db = Config.sqlMap.getDb(); + db.beginTransaction(); + Cursor c = db.rawQuery(sql, new String[]{}); + if (c.moveToFirst()) { + item = new UnknownQueryItem(); + item.setRawDataPath(c.getString(c.getColumnIndex("raw_data_path"))); + item.setCameraInOrOut(c.getString(c.getColumnIndex("camera_in_or_out"))); + item.setCreateTime(c.getString(c.getColumnIndex("create_time"))); + } + c.close(); + db.endTransaction(); + return item; } } diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/FileUtil.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/FileUtil.java index 9977e56..f5b0f29 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/FileUtil.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/FileUtil.java @@ -13,6 +13,16 @@ public static File writeToFile(String fileName, byte[] fileBytes) { try { + writeToFile(fileName, fileBytes, 0, fileBytes.length); + }catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static File writeToFile(String fileName, byte[] fileBytes, int offset, int size) { + try { if (fileBytes == null) { fileBytes = new byte[]{}; } @@ -24,7 +34,7 @@ } file.createNewFile(); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(dir, fileName))); - bos.write(fileBytes); + bos.write(fileBytes, offset, size); bos.flush(); bos.close(); return new File(dir, fileName); diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java index fa3c18a..7ad08d9 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java @@ -1,18 +1,17 @@ package cn.com.basic.face.util; -import android.graphics.Canvas; -import android.graphics.drawable.Drawable; import android.util.Log; import android.view.Surface; -import android.view.SurfaceHolder; -import android.widget.ImageButton; import android.graphics.Bitmap; -import android.widget.ImageView; + +import java.util.Date; import java.util.List; import cn.com.basic.face.base.BaseApplication; +import cn.com.basic.face.discern.common.CommonVariables; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; import cn.com.basic.face.service.SurveillanceMng; +import cn.com.basic.face.service.sqlite.SurveillanceDao; import java.nio.ByteBuffer; @@ -144,16 +143,23 @@ //byteBuffer.rewind(); bitmap.copyPixelsFromBuffer(byteBuffer); // String str = Base64.encodeToString(item.image, offset, size, Base64.DEFAULT); -// System.out.println(str.length()); -// System.out.println(str); // surveillanceQueryItem.setBase64Image(str); surveillanceQueryItem.setNativeImg(item); surveillanceQueryItem.setBitmap(bitmap); surveillanceQueryItem.setWidth(item.width+""); surveillanceQueryItem.setHeight(item.height+""); + surveillanceQueryItem.setCreateTime(new Date()); + surveillanceQueryItem.setInOrOutCamera(cameraIdx+""); + if (BaseApplication.getInstance().networkNotAvailable()) { + surveillanceQueryItem.setRegisterOrCheckIn(CommonVariables.Surveillance.VISIT_UNKNOWN_ITEM_TYPE); + } bitmapList.add(surveillanceQueryItem); } - SurveillanceMng.getInstance().addBitmap(bitmapList, faceListPb.arr, s, cameraIdx+"", new byte[]{}); + if (BaseApplication.getInstance().networkAvailable()) { + SurveillanceMng.getInstance().addBitmap(bitmapList, faceListPb.arr, s, cameraIdx+"", new byte[]{}); + } else { + SurveillanceDao.getInstance().saveOfflineUnknownToLocal(bitmapList, faceListPb.arr, cameraIdx+""); + } }catch(Exception e){ e.printStackTrace(); diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UnknownSurveillanceQueryItemUtil.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UnknownSurveillanceQueryItemUtil.java new file mode 100644 index 0000000..5d83c8a --- /dev/null +++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UnknownSurveillanceQueryItemUtil.java @@ -0,0 +1,53 @@ +package cn.com.basic.face.util; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import cn.com.basic.face.discern.common.CommonVariables; +import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; +import cn.com.basic.face.fragment.SurveillanceFragment; + +public class UnknownSurveillanceQueryItemUtil { + + private static UnknownSurveillanceQueryItemUtil instance = new UnknownSurveillanceQueryItemUtil(); + public static UnknownSurveillanceQueryItemUtil getInstance() { + return instance; + } + + List<SurveillanceQueryItem> allItems = new ArrayList<>(); + + public void addItems(List<SurveillanceQueryItem> unknownItems) { + allItems.addAll(unknownItems); + } + + public void removeTimeoutItemAndShow() { + List itemsToRemove = new ArrayList(); + for (SurveillanceQueryItem item : allItems) { + if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_UNKNOWN_ITEM_TYPE) { + Date now = new Date(); + Date createTime = item.getCreateTime(); + double minutes = (now.getTime() - createTime.getTime())*1.0 / 1000 / 60; + if (minutes >= 5) { + itemsToRemove.add(item); + } + } + } + allItems.removeAll(itemsToRemove); + SurveillanceFragment.getInstance().get_fragment_supervisory_bottom_visitor_list_view().show(UnknownSurveillanceQueryItemUtil.getInstance().getUnknownTwoRows()); + SurveillanceFragment.getInstance().get_fragment_supervisory_bottom_attendance_list_view().show(new ArrayList()); + } + + private List getUnknownTwoRows() { + return allItems; + } + + public List getAllUnregisterVisitorTwoRowsForSelect(long selectedId) { + return allItems; + } + + public List getAllUnregisterAttenderTwoRowsForSelect(long selectedId) { + return allItems; + } + +} -- Gitblit v1.8.0