/* * Copyright (C) 2018 Baidu, Inc. All Rights Reserved. */ package com.example.datalibrary.api; import android.content.Context; import android.text.TextUtils; import android.util.Log; import com.example.datalibrary.db.DBManager; import com.example.datalibrary.listener.DBLoadListener; import com.example.datalibrary.model.Group; import com.example.datalibrary.model.User; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FaceApi { private static FaceApi instance; public boolean isDelete; private List users = new ArrayList<>(); private FaceApi() { } public static synchronized FaceApi getInstance() { if (instance == null) { instance = new FaceApi(); } return instance; } public void init(DBLoadListener dbLoadListener , Context context){ users = new ArrayList<>(); DBManager.getInstance().init(context); DBManager.getInstance().queryAllUsers(dbLoadListener); } /** * 添加用户组 */ public boolean groupAdd(Group group) { if (group == null || TextUtils.isEmpty(group.getGroupId())) { return false; } Pattern pattern = Pattern.compile("^[0-9a-zA-Z_-]{1,}$"); Matcher matcher = pattern.matcher(group.getGroupId()); if (!matcher.matches()) { return false; } boolean ret = DBManager.getInstance().addGroup(group); return ret; } /** * 查询用户组(默认最多取1000个组) */ public List getGroupList(int start, int length) { if (start < 0 || length < 0) { return null; } if (length > 1000) { length = 1000; } List groupList = DBManager.getInstance().queryGroups(start, length); return groupList; } /** * 根据groupId查询用户组 */ public List getGroupListByGroupId(String groupId) { if (TextUtils.isEmpty(groupId)) { return null; } return DBManager.getInstance().queryGroupsByGroupId(groupId); } /** * 根据groupId删除用户组 */ public boolean groupDelete(String groupId) { if (TextUtils.isEmpty(groupId)) { return false; } boolean ret = DBManager.getInstance().deleteGroup(groupId); return ret; } /** * 添加用户 */ public boolean userAdd(User user) { if (user == null || TextUtils.isEmpty(user.getGroupId())) { return false; } Pattern pattern = Pattern.compile("^[0-9a-zA-Z_-]{1,}$"); Matcher matcher = pattern.matcher(user.getUserId()); if (!matcher.matches()) { return false; } boolean ret = DBManager.getInstance().addUser(user); User newUser = DBManager.getInstance().queryUserByUserNameItem(user.getUserName()); users.add(0 , newUser); return ret; } /** * 查找所有用户 */ public synchronized List getAllUserList() { if (users == null && users.size() == 0){ users = DBManager.getInstance().queryAllUsers(); } return users; } /** * 根据userName查找用户(精确查找) */ public List getUserListByUserName(String userName) { if (TextUtils.isEmpty(userName)) { return null; } return DBManager.getInstance().queryUserByUserNameAccu(userName); } /** * 根据userName查找用户(模糊查找) */ public List getUserListByUserNameVag(String userName) { if (TextUtils.isEmpty(userName)) { return null; } if (users != null && users.size() > 0){ List list = new ArrayList(); for (int i = 0 , k = users.size(); i < k; i++){ User user = users.get(i); if (user.getUserName().indexOf(userName) != -1){ user.setUserIndex(i); list.add(user); } } return list; }else { return DBManager.getInstance().queryUserByUserNameVag(userName); } } /** * 根据_id查找用户 */ public User getUserListById(int _id) { if (_id < 0) { return null; } List userList = DBManager.getInstance().queryUserById(_id); if (userList != null && userList.size() > 0) { return userList.get(0); } return null; } /** * 根据_id查找用户 */ public User getByUserId(String group,String userId) { if (TextUtils.isEmpty(userId)) { return null; } return DBManager.getInstance().queryByUserId(group,userId); } /** * 更新用户 */ public boolean userUpdate(User user) { if (user == null) { return false; } boolean ret = DBManager.getInstance().updateUser(user); return ret; } public boolean userUpdateOnly(User user) { if (user == null) { return false; } boolean ret = DBManager.getInstance().onlyUpdateUser(user); if(users!=null&&users.size()>0){ for(User u:users){ if(u.getId()==user.getId()){ boolean isUp = false; if(!TextUtils.isEmpty(user.getUserName())){ u.setUserName(user.getUserName()); isUp = true; } if(!TextUtils.isEmpty(user.getImageName())){ u.setImageName(user.getImageName()); isUp = true; } if(user.getFeature()!=null){ u.setFeature(user.getFeature()); u.setFaceToken(user.getFaceToken()); isUp = true; } if(isUp){ break; } } } } return ret; } /** * 更新用户 */ public boolean userUpdate(String userName, String imageName, byte[] feature) { if (userName == null || imageName == null || feature == null) { return false; } boolean ret = DBManager.getInstance().updateUser(userName, imageName, feature); return ret; } /** * 删除用户 */ public boolean userDelete(String userId) { if (TextUtils.isEmpty(userId)) { return false; } boolean ret = DBManager.getInstance().deleteUser(userId); if (ret){ for (int i = 0 , k = users.size(); i < k; i++){ if (users.get(i).getUserId().equals(userId)){ users.remove(i); break; } } } return ret; } /** * 删除用户 */ public boolean userDeletes(List list , boolean isHave , DBLoadListener dbLoadListener) { // boolean isUsers = list.equals(users) && ; int count = list.size(); boolean isAllCover = true; if (list.size() == users.size()){ for (int i = 0 , k = count; i < k; i++){ if (!list.get(i).isChecked()){ isAllCover = false; break; } } } else { isAllCover = false; } if (isAllCover){ dbLoadListener.onLoad(count / 2 , count , 0.5f); users = new ArrayList<>(); DBManager.getInstance().clearTable(); dbLoadListener.onComplete(null , count); return true; } boolean rets = true; int k = list.size(); int i = 0; dbLoadListener.onStart(count); while (i < k && !Thread.currentThread().isInterrupted() && isDelete){ User user = list.get(i); int userId = user.getId(); if (list.get(i).isChecked()) { long time = System.currentTimeMillis(); boolean ret = DBManager.getInstance().deleteUser(userId); if (ret){ /*User user1 = */list.remove(user); if (isHave){ users.remove(user); } k = list.size(); if (dbLoadListener != null){ dbLoadListener.onLoad(i + count - k , count , ((float) (i + count - k) / (float) count)); } }else { rets = false; i++; } } else { i++; } } dbLoadListener.onComplete(null , count); return rets; } public void userClean(){ users = new ArrayList<>(); DBManager.getInstance().clearTable(); } /** * 远程删除用户 */ public boolean userDeleteByName(String userName) { if (TextUtils.isEmpty(userName)) { return false; } boolean ret = DBManager.getInstance().userDeleteByName(userName); if (ret){ for (int i = 0 , k = users.size(); i < k; i++){ if (users.get(i).getUserName().equals(userName)){ users.remove(i); break; } } } return ret; } /** * 是否是有效姓名 * * @param username 用户名 * @return 有效或无效信息 */ public String isValidName(String username) { if (username == null || "".equals(username.trim())) { return "姓名为空"; } // 姓名过长 if (!isSpotString(username)) { return "姓名过长"; } /* String regex0 = "[ `~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()—" + "—+|{}【】‘;:”“’。,、?]|\n|\r|\t"; Pattern p0 = Pattern.compile(regex0); Matcher m0 = p0.matcher(username); if (m0.find()) { return "姓名中含有特殊符号"; } */ // 含有特殊符号 String regex = "^[0-9a-zA-Z_\\u3E00-\\u9FA5]+$"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(username); if (!m.find()) { return "姓名中含有特殊符号"; } return "0"; } public static boolean isSpotString(String str){ int n = 0; String newStr = ""; for (int i = 0 , k = str.length(); i < k ; i++){ char item = str.charAt(i); if (isChinese(item)){ n += 2; }else { n += 1; } if (n > 10){ return false; } newStr += item; } return true; } public static boolean isChinese(char c) { return c >= 0x4E00 && c <= 0x9FA5; // 根据字节码判断 } public boolean registerUserIntoDBmanager(String groupName,String uid, String userName, String picName, String userInfo, byte[] faceFeature) { boolean isSuccess = false; User user = new User(); user.setGroupId(groupName); // 用户id(由数字、字母、下划线组成),长度限制128B // uid为用户的id,百度对uid不做限制和处理,应该与您的帐号系统中的用户id对应。 //final String uid = UUID.randomUUID().toString(); user.setUserId(uid); user.setUserName(userName); user.setFeature(faceFeature); user.setImageName(picName); if (userInfo != null) { user.setUserInfo(userInfo); } // 添加用户信息到数据库 return FaceApi.getInstance().userAdd(user); } /** * 获取底库数量 * * @return */ public int getmUserNum() { return users.size(); } // 删除识别记录 public boolean deleteRecords(String userName) { boolean ret = false; if (TextUtils.isEmpty(userName)) { return ret; } ret = DBManager.getInstance().deleteRecords(userName); return ret; } // 删除识别记录 public boolean deleteRecords(String startTime, String endTime) { boolean ret = false; if (TextUtils.isEmpty(startTime) && TextUtils.isEmpty(endTime)) { return ret; } // ret = DBManager.getInstance().deleteRecords(startTime, endTime); return ret; } // 清除识别记录 public int cleanRecords() { boolean ret = false; int num = DBManager.getInstance().cleanRecords(); return num; } public void clean(){ users = null; } public List getUsers() { return users; } public void setUsers(List users) { this.users = users; } }