Shangyp 4 місяців тому
батько
коміт
e26a3645d6

+ 2 - 1
app/build.gradle

@@ -174,7 +174,8 @@ dependencies {
     implementation 'cn.hutool:hutool-all:5.7.0'
     implementation 'org.bouncycastle:bcprov-jdk15to18:1.69'
     implementation 'org.java-websocket:Java-WebSocket:1.5.3'
-
+    //xRecyclerview
+    implementation 'com.jcodecraeer:xrecyclerview:1.6.0'
     //丽江身份证阅读器
     implementation project(path: ':lib_idcard')
 

+ 71 - 59
app/src/main/java/com/hanghui/senic/activity/setup/PersonnelDataActivity.java

@@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import android.util.Log;
 import android.view.View;
 import android.widget.EditText;
 import android.widget.ImageView;
@@ -25,12 +26,18 @@ import com.hanghui.senic.controller.DXAllInOneIDCardNewController;
 import com.hanghui.senic.service.usbserialdemo.utile.ConfigManager;
 import com.hanghui.senic.service.usbserialdemo.utile.StringIsNull;
 import com.hanghui.senic.service.usbserialdemo.utile.loacat.AppLogUtils;
+import com.jcodecraeer.xrecyclerview.XRecyclerView;
 
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
+/**
+ * 人员数据
+ */
 public class PersonnelDataActivity extends BaseActivity implements View.OnClickListener {
 
     private TextView setUPIncloud_title;
@@ -40,7 +47,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
     private ImageView personnelData_inquireImage;
     private TextView personnelData_inquireText;
     private LinearLayout personnelData_queryCondition_Linear;
-    private RecyclerView personnelData_RecyclerView;
+    private XRecyclerView personnelData_RecyclerView;
     private PersonnelDataAdapter personnelDataAdapter;
     private List<UserFaceData.Data.Item> list = new ArrayList<>();
     private int page = 1;
@@ -52,8 +59,9 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
     private EditText queryCondition_inputPhone;
     private TextView personnelData_input_empty;//清空按钮
     private TextView personnelData_input_search;//搜索按钮
-    private List<User> userList = new ArrayList<>();
+//    private List<User> userList = new ArrayList<>();
     private AddListDataThread addListDataThread;
+    private boolean isFlushLoop = true;//是否刷新数据
 
     @Override
     public int getLayout() {
@@ -71,6 +79,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
     protected void onDestroy() {
         super.onDestroy();
         if (addListDataThread != null) {
+            isFlushLoop = false;
             addListDataThread.interrupt();
             addListDataThread = null;
         }
@@ -99,57 +108,60 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
         LinearLayoutManager manager = new LinearLayoutManager(CommonUtil.getCurrentActivity());
         manager.setOrientation(LinearLayoutManager.VERTICAL);
         personnelData_RecyclerView.setLayoutManager(manager);
-        //list赋值
-        addList(page);
         personnelDataAdapter = new PersonnelDataAdapter(list, PersonnelDataActivity.this);
         personnelData_RecyclerView.setAdapter(personnelDataAdapter);
+//        personnelData_RecyclerView.setPullRefreshEnabled(false);//禁止下拉刷新
         // 添加RecyclerView的滚动监听来实现上拉加载
-        personnelData_RecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+        personnelData_RecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
             @Override
-            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
-                super.onScrollStateChanged(recyclerView, newState);
-                // 在这里处理滑动状态改变,如停止滑动
-                if (newState == RecyclerView.SCROLL_STATE_IDLE) {
-                    AppHandler.getHandler().post(new Runnable() {
-                        @Override
-                        public void run() {
-                            if (list.size() > 0){
-                                boolean reachedEnd = !recyclerView.canScrollVertically(1);
-                                if (reachedEnd) {
-                                    // 上拉加载数据的逻辑
-                                    loadMoreData();
-                                }
-                            }
-                        }
-                    });
-                }
-
+            public void onRefresh() {
+                //下拉刷新
+                isFlushLoop = true;
             }
 
             @Override
-            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
-                super.onScrolled(recyclerView, dx, dy);
+            public void onLoadMore() {
+                // 上滑加载数据的逻辑
+                loadMoreData();
             }
         });
     }
 
     private void addList(int page) {
         int size;
-        if (userList.size() <= 20){
-            size = userList.size();
+        ConcurrentHashMap<String,User> userMap = FaceApi.getInstance().getUsers();
+        if (userMap == null ){
+            return;
+        }
+        Collection<User> values = userMap.values();
+        if (values.size() <= 20){
+            size = values.size();
         }else {
             size = page * 20;
         }
-        for (int i = 0; i < size; i++) {
+        int currentSubscript = 0;//获取当前下标,处理数据
+        for (User value : values) {
+            currentSubscript++;
+            if (currentSubscript == size){
+                break;
+            }
             UserFaceData.Data.Item item = new UserFaceData.Data.Item();
-            UserInfoBean userInfoBean = ConfigManager.getGson().fromJson(userList.get(i).getUserInfo(), UserInfoBean.class);
-            item.setUserName(userInfoBean.getUserName());
-            item.setPhoto(userInfoBean.getPhoto());
-            item.setPhone(userInfoBean.getPhone());
-            item.setIdNumber(userInfoBean.getIdNumber());
-            item.setCardIdEx(userInfoBean.getCardIdEx());
-            item.setUserId(userInfoBean.getUserId());
-            list.add(item);
+            if (value != null){
+                UserInfoBean userInfoBean = ConfigManager.getGson().fromJson(value.getUserInfo(), UserInfoBean.class);
+                item.setUserName(userInfoBean.getUserName());
+                item.setPhoto(userInfoBean.getPhoto());
+                item.setPhone(userInfoBean.getPhone());
+                item.setIdNumber(userInfoBean.getIdNumber());
+                item.setCardIdEx(userInfoBean.getCardIdEx());
+                item.setUserId(userInfoBean.getUserId());
+                list.add(item);
+            }
+        }
+        //数据去重
+        for (UserFaceData.Data.Item element : list) {
+            if (!list.contains(element)) {
+                list.add(element);
+            }
         }
     }
 
@@ -164,13 +176,8 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
             page++;
             //list赋值
             addList(page);
-            //数据去重
-            for (UserFaceData.Data.Item element : list) {
-                if (!list.contains(element)) {
-                    list.add(element);
-                }
-            }
         }
+        personnelData_RecyclerView.loadMoreComplete();
         personnelDataAdapter.notifyDataSetChanged();
     }
 
@@ -220,17 +227,18 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
 
     private List<UserFaceData.Data.Item> searchList(String id, String cardNumber, String name, String idNumber, String phone){
         List<UserFaceData.Data.Item> itemList = new ArrayList<>();
+        ConcurrentHashMap<String,User> userMap = FaceApi.getInstance().getUsers();
         //当搜索条件为空时,重新添加数据
         if (StringIsNull.IsStringNull(id) && StringIsNull.IsStringNull(cardNumber) && StringIsNull.IsStringNull(name)
                 && StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
-            for (User item : userList) {
+            for (User item : userMap.values()) {
                 UserFaceData.Data.Item userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), UserFaceData.Data.Item.class);
                 itemList.add(userInfoBean);
             }
             return itemList;
         }
 
-        for (User item : userList) {
+        for (User item : userMap.values()) {
             UserFaceData.Data.Item userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), UserFaceData.Data.Item.class);
             // 比较当前元素是否等于 "Apple"
             String userId = String.valueOf(userInfoBean.getUserId());
@@ -263,23 +271,27 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
         @Override
         public void run() {
             super.run();
-            //添加数据
-            Map<String,User> userMap = FaceApi.getInstance().getUsers();
-            // 获取Map转换为List时的泛型类型
-            Type listType = new TypeToken<List<User>>() {}.getType();
-            // 将Map转换为List
-            userList = new Gson().fromJson(ConfigManager.getGson().toJson(userMap.values()), listType);
-            runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    if (list.size() == 0){
+            while (true){
+                //当isFlushLoop为false时,不做后续刷新处理,等待状态改变后,再次执行后续方法
+                if (!isFlushLoop){
+                    continue;
+                }
+                isFlushLoop = false;
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        list.clear();
                         addList(page);
+                        if (personnelDataAdapter != null ){
+                            personnelDataAdapter.notifyDataSetChanged();
+                        }
+                        if (personnelData_RecyclerView != null ){
+                            personnelData_RecyclerView.refreshComplete();
+                        }
                     }
-                    if (personnelDataAdapter != null ){
-                        personnelDataAdapter.notifyDataSetChanged();
-                    }
-                }
-            });
+                });
+
+            }
         }
     }
 }

+ 2 - 0
app/src/main/java/com/hanghui/senic/activity/view/BaiDuFaceView.java

@@ -884,6 +884,8 @@ public class BaiDuFaceView {
 
     public void getPlatformsCod(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
         if (isOpenBaiduFacePreviewActivity()){
+            AppLogUtils.e(false,"结果页创建","检测到当前页面非百度预览页面,调用Resume方法后return掉,不做后续逻辑处理");
+            BaiduFaceController.getInstance().invokeResume();
             return;
         }
         if (mView == null){

+ 1 - 0
app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceController.java

@@ -48,6 +48,7 @@ public class BaiduFaceController extends BaseController {
 
     public void invokePersonCardWithSetState(String cardName, String cardNo, String cardPhoto) {
         setPersonCardState();
+        AppLogUtils.e(false,"","-------cardPhoto "+cardPhoto);
         invokePersonCard(cardName, cardNo, cardPhoto);
     }
 

+ 3 - 0
app/src/main/java/com/hanghui/senic/controller/QRCodeController.java

@@ -20,6 +20,7 @@ import android.os.IBinder;
 import android.os.Message;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.util.Log;
 import android.widget.Toast;
 
 import com.hanghui.senic.activity.view.ClickButtonFloatView;
@@ -255,12 +256,14 @@ public class QRCodeController extends BaseController {
         if (!TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_WAIT)) {
             return;
         }
+        Log.e("","----------------"+qrCardData);
         if (data.equals(qrCardData)) {
             AppLogUtils.i(false, "二维码数据处理中心", "同一二维码且同码间隔时间未到,不做后续逻辑. 码值为:" + data);
             return;
         }
         //销毁延时器,重新计时
         AppHandler.getHandler().removeCallbacks(qrCardUniqueIdRunnable);
+        Log.e("","---------------- getQrCodeInterval "+ConfigManager.getAuthenticationBean().getData().get(0).getQrCodeInterval());
         AppHandler.getHandler().postDelayed(qrCardUniqueIdRunnable,
                 ConfigManager.getAuthenticationBean().getData().get(0).getQrCodeInterval() * 1000);
         //保存二维码数据

+ 1 - 5
app/src/main/java/com/hanghui/senic/network/HttpRequest.java

@@ -1476,10 +1476,6 @@ public class HttpRequest {
                 if (ConfigManager.isAgeLimitOpen(StringIsNull.ReturnString(idNumber))) {
                     return;
                 }
-                //判断核验接口是否开启
-                if (ConfigManager.isLinkagePlatformClose()) {
-                    return;
-                }
 
 
                 FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
@@ -1558,7 +1554,7 @@ public class HttpRequest {
      */
     public void requestLocalBlacklistConfig() {
         Map<String, Object> map = new HashMap<>();
-        map.put("deviceType", 0);//设备类型 <br />0-通用设备<br />1-HH_CULTURE<br />2-访客机<br />3-临时身份证名
+        map.put("deviceType", 4);//设备类型 0-通用设备<br />1-HH_CULTURE 2-访客机 3-临时身份证名 4-HHLocal
         map.put("sn", ConfigManager.getDeviceSN());
         map.put("token", ConfigManager.token);
         pAuthentication.PLocalBlacklistConfig(map, new MyPresenter.DataResponseCallback() {

+ 7 - 2
app/src/main/res/layout/activity_personnel_data.xml

@@ -198,11 +198,16 @@
             android:textColor="@color/fF3F4F6" />
     </LinearLayout>
     <!--列表展示-->
-    <androidx.recyclerview.widget.RecyclerView
+<!--    <androidx.recyclerview.widget.RecyclerView-->
+<!--        android:id="@+id/personnelData_RecyclerView"-->
+<!--        android:layout_width="match_parent"-->
+<!--        android:layout_height="match_parent"-->
+<!--        android:layout_marginLeft="@dimen/dp_20"-->
+<!--        android:layout_marginRight="@dimen/dp_20"/>-->
+    <com.jcodecraeer.xrecyclerview.XRecyclerView
         android:id="@+id/personnelData_RecyclerView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_marginLeft="@dimen/dp_20"
         android:layout_marginRight="@dimen/dp_20"/>
-
 </LinearLayout>