From 1a10d546c76f474d33e23c5958c08aa0afcdae67 Mon Sep 17 00:00:00 2001
From: sujinwen <sujinwen@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期一, 24 七月 2017 11:46:45 +0800
Subject: [PATCH] 

---
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/SurveillanceQueryItemUtil.java |  189 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 166 insertions(+), 23 deletions(-)

diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/SurveillanceQueryItemUtil.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/SurveillanceQueryItemUtil.java
index c52e764..ceccc0d 100644
--- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/SurveillanceQueryItemUtil.java
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/SurveillanceQueryItemUtil.java
@@ -2,8 +2,10 @@
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import cn.com.basic.face.discern.common.CommonVariables;
@@ -19,26 +21,33 @@
     }
 
     //鎵�鏈夌洃鎺у浘鐗�
-    private static List<SurveillanceQueryItem> allItems = new ArrayList<>();
+    public static List<SurveillanceQueryItem> allItems = new ArrayList<>();
     //璁垮閫夐」鍗$殑鍒嗙被锛堟湭娉ㄥ唽/浜哄憳绫诲瀷銆佹潵璁跨姸鎬併�佹爣绛剧姸鎬侊級
     //鑰冨嫟閫夐」鍗★紙鑰冨嫟浜哄憳绫诲瀷锛氭暀甯堛�佸鐢熴�佸憳宸ワ紝鏉ヨ鐘舵�侊細绛惧埌銆佺閫�锛�
     //绗竴琛屾樉绀烘湭娉ㄥ唽锛岀浜岃鏄剧ず鏉ヨ
-    private static List<SurveillanceQueryItem> visitorTwoRows = new ArrayList<>();
+    public static List<SurveillanceQueryItem> visitorTwoRows = new ArrayList<>();
     //绗竴琛屾樉绀虹鍒帮紝绗簩琛屾樉绀虹閫�
-    private static List<SurveillanceQueryItem> attendanceTwoRows = new ArrayList<>();
-    //鏈敞鍐岀殑鍒楄〃, 閫夋嫨鏃剁敤
-    private static List<SurveillanceQueryItem> allUnregisterTwoRowsForSelect = new ArrayList();
+    public static List<SurveillanceQueryItem> attendanceTwoRows = new ArrayList<>();
+    //鏈敞鍐岀殑璁垮鍒楄〃, 閫夋嫨鏃剁敤
+    public static List<SurveillanceQueryItem> allUnregisterVisitorTwoRowsForSelect = new ArrayList();
+    //鏈敞鍐岀殑鑰冨嫟鍒楄〃, 閫夋嫨鏃剁敤
+    public static List<SurveillanceQueryItem> allUnregisterAttenderTwoRowsForSelect = new ArrayList();
 
-    public void addItems(List<SurveillanceQueryItem> returnItems, List<SurveillanceQueryItem> requestItems) {
+    public void addItems(List<SurveillanceQueryItem> returnItems, List<SurveillanceQueryItem> requestItems, String cameraInOrOut) {
         for ( int i = 0; i < returnItems.size(); i++) {
             SurveillanceQueryItem returnItem = returnItems.get(i);
             SurveillanceQueryItem requestItem = requestItems.get(i);
-            addItem(returnItem, requestItem);
+            addItem(returnItem, requestItem, cameraInOrOut);
         }
         removeTimeoutItemAndShow();
     }
 
-    public void addItem(SurveillanceQueryItem returnItem, SurveillanceQueryItem requestItem) {
+    public void addItem(SurveillanceQueryItem returnItem, SurveillanceQueryItem requestItem, String cameraInOrOut) {
+        if (!CommonVariables.FACE_SERVER) {
+            RtspFaceNative.setFaceLabel(Integer.parseInt(cameraInOrOut), requestItem.getStTrackId(), returnItem.getVisitorType()==null?"":returnItem.getVisitorType().substring(0,
+                    returnItem.getVisitorType().length() > 3 ? 3 : returnItem.getVisitorType().length()
+                    ));
+        }
         returnItem.setCreateTime(new Date());
         returnItem.setStTrackId(requestItem.getStTrackId());
         returnItem.setBitmap(requestItem.getBitmap());
@@ -67,15 +76,20 @@
     public List getAttendanceTwoRows() {
         attendanceTwoRows.clear();
         for (SurveillanceQueryItem item : allItems) {
-            if (item.getRegisterOrCheckIn() ==  CommonVariables.Surveillance.VISIT_ATTENDANCE_ITEM_TYPE) {
+            if (item.getRegisterOrCheckIn() ==  CommonVariables.Surveillance.VISIT_ATTENDANCE_IN ||
+                    item.getRegisterOrCheckIn() ==  CommonVariables.Surveillance.VISIT_ATTENDANCE_OUT
+                    ) {
                 attendanceTwoRows.add(item);
             }
         }
+        AttendentUtil.removeDuplicateAttendanceIn();
+        AttendentUtil.removeDuplicateAttendanceOut();
+        AttendentUtil.sortByRow();
         return attendanceTwoRows;
     }
 
-    public List getAllUnregisterTwoRowsForSelect(long selectedId) {
-        allUnregisterTwoRowsForSelect.clear();
+    public List getAllUnregisterVisitorTwoRowsForSelect(long selectedId) {
+        allUnregisterVisitorTwoRowsForSelect.clear();
         List<SurveillanceQueryItem> registerList = new ArrayList();
         int countPerRow = 9;
         for (SurveillanceQueryItem surveillanceQueryItem : allItems) {
@@ -113,22 +127,65 @@
             }
             items.add(item);
         }
-        allUnregisterTwoRowsForSelect.addAll(items);
-        return allUnregisterTwoRowsForSelect;
+        allUnregisterVisitorTwoRowsForSelect.addAll(items);
+        return allUnregisterVisitorTwoRowsForSelect;
+    }
+
+    public List getAllUnregisterAttenderTwoRowsForSelect(long selectedId) {
+        allUnregisterAttenderTwoRowsForSelect.clear();
+        List<SurveillanceQueryItem> registerList = new ArrayList();
+        int countPerRow = 9;
+        for (SurveillanceQueryItem surveillanceQueryItem : allItems) {
+            if (surveillanceQueryItem.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_REGISTER_ITEM_TYPE) {
+                if (registerList.size() > countPerRow*2) {
+                    break;
+                }
+                if (surveillanceQueryItem.getIdForSelect() == selectedId) {
+                    surveillanceQueryItem.setSurveillancePhotoSelected(true);
+                } else {
+                    surveillanceQueryItem.setSurveillancePhotoSelected(false);
+                }
+                registerList.add(surveillanceQueryItem);
+            }
+        }
+
+        SurveillanceQueryItem item;
+        List items = new ArrayList();
+        int m = 0, n = 0;
+        for (int i = 0; i < countPerRow*2; i++) {
+            if (i % 2 == 0) {
+                if (m < registerList.size()) {
+                    item = registerList.get(m);
+                    m++;
+                } else {
+                    item = VisitorUtil.getBlankItem();
+                }
+            } else {
+                if (n < registerList.size() - countPerRow) {
+                    item = registerList.get(countPerRow+n);
+                    n++;
+                } else {
+                    item = VisitorUtil.getBlankItem();
+                }
+            }
+            items.add(item);
+        }
+        allUnregisterAttenderTwoRowsForSelect.addAll(items);
+        return allUnregisterAttenderTwoRowsForSelect;
     }
 
     public void removeTimeoutItemAndShow() {
         List itemsToRemove = new ArrayList();
-        for (SurveillanceQueryItem item : allItems) {
-            if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_REGISTER_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);
-                }
-            }
-        }
+//        for (SurveillanceQueryItem item : allItems) {
+//            if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_REGISTER_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(SurveillanceQueryItemUtil.getInstance().getVisitorTwoRows());
         SurveillanceFragment.getInstance().get_fragment_supervisory_bottom_attendance_list_view().show(SurveillanceQueryItemUtil.getInstance().getAttendanceTwoRows());
@@ -230,6 +287,92 @@
 
     static class AttendentUtil {
 
+        public static void removeDuplicateAttendanceIn() {
+            Map<String, String> registerIdMap = new HashMap<>();
+            List itemsToRemove = new ArrayList();
+            for (SurveillanceQueryItem item : attendanceTwoRows) {
+                if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_ATTENDANCE_IN) {
+                    String registerId = item.getRegisterId();
+                    if (registerIdMap.containsKey(item.getRegisterId())) {
+                        itemsToRemove.add(item);
+                    } else {
+                        registerIdMap.put(registerId, registerId);
+                    }
+                }
+            }
+            attendanceTwoRows.removeAll(itemsToRemove);
+        }
+
+        public static void removeDuplicateAttendanceOut() {
+            Map<String, String> registerIdMap = new HashMap<>();
+            List itemsToRemove = new ArrayList();
+            for (SurveillanceQueryItem item : attendanceTwoRows) {
+                if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_ATTENDANCE_OUT) {
+                    String registerId = item.getRegisterId();
+                    if (registerIdMap.containsKey(item.getRegisterId())) {
+                        itemsToRemove.add(item);
+                    } else {
+                        registerIdMap.put(registerId, registerId);
+                    }
+                }
+            }
+            attendanceTwoRows.removeAll(itemsToRemove);
+        }
+
+        public static void sortByRow() {
+            List<SurveillanceQueryItem> attenderInList = new ArrayList<SurveillanceQueryItem>();
+            List<SurveillanceQueryItem> attenderOutList = new ArrayList<SurveillanceQueryItem>();
+            int i1 = 0, j = 0;
+            int maxAttenderIn = 50;
+            int maxAttenderOut = 50;
+            for (SurveillanceQueryItem item : attendanceTwoRows) {
+                if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_ATTENDANCE_IN) {
+                    if (i1 < maxAttenderIn) {
+                        attenderInList.add(item);
+                        i1++;
+                    }
+                }
+                if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_ATTENDANCE_OUT) {
+                    if (j < maxAttenderOut) {
+                        attenderOutList.add(item);
+                        j++;
+                    }
+                }
+            }
+
+            int max = attenderInList.size() > attenderOutList.size() ? attenderInList.size() : attenderOutList.size();
+
+            List tempList = new ArrayList();
+
+            int m = 0, n = 0;
+            for (int i = 0; i < max * 2; i++) {
+                SurveillanceQueryItem item;
+                if (i % 2 == 0) {
+                    if (m < attenderInList.size()) {
+                        item = attenderInList.get(m);
+                    } else {
+                        item = getBlankItem();
+                    }
+                    m++;
+                } else {
+                    if (n < attenderOutList.size()) {
+                        item = attenderOutList.get(n);
+                    } else {
+                        item = getBlankItem();
+                    }
+                    n++;
+                }
+                tempList.add(item);
+            }
+            attendanceTwoRows.clear();
+            attendanceTwoRows.addAll(tempList);
+        }
+
+        public static SurveillanceQueryItem getBlankItem() {
+            SurveillanceQueryItem blankItem = new SurveillanceQueryItem();
+            blankItem.setRegisterOrCheckIn(CommonVariables.Surveillance.VISIT_ATTENDANCE_BLANK);
+            return blankItem;
+        }
     }
 
 }

--
Gitblit v1.8.0