package com.basic.security.manager.impl.sqlite; import android.text.TextUtils; import android.util.Base64; import com.basic.security.manager.impl.es.ReadConfig; import com.basic.security.utils.Base64Util; import com.basic.security.utils.CompareFeatureResult; import com.basic.security.utils.Constants; import com.basic.security.utils.FaceId; import com.basic.security.utils.FastDFSUtil; import com.basic.security.utils.MutableDocumentUtil; import com.couchbase.lite.Blob; import com.couchbase.lite.Expression; import com.basic.security.model.ModelAdapter; import com.couchbase.lite.Ordering; import org.androidannotations.api.BackgroundExecutor; import org.json.JSONArray; import org.json.JSONObject; import org.xutils.common.Callback; import org.xutils.http.RequestParams; import org.xutils.x; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class SlPersonManager extends SlBaseManager { public static void savePerson(ModelAdapter personDocument) { save(personDocument); uploadToTemporary(personDocument.getId()); } public static void uploadToTemporary(String personId) { BackgroundExecutor.execute(new BackgroundExecutor.Task("", 0, "") { public void execute() { try { ModelAdapter savedPersonDocument = SlPersonManager.findById("person", personId); RequestParams params = new RequestParams("http://"+ReadConfig.getInstance().getTempHost()+":"+ReadConfig.getInstance().getTempPort()+""+ReadConfig.getInstance().getTempUrl()+""); // RequestParams params = new RequestParams(("http://192.168.1.203:3697/addPerson/uploadToTemporary")); // params.addHeader("Content-Type", "application/json"); params.addHeader("Content-Type", "application/json-rpc"); JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); jsonObject.put("id", savedPersonDocument.getId()); jsonObject.put("name", MutableDocumentUtil.getString(savedPersonDocument, "name")); //姓名(可空) jsonObject.put("cardId", MutableDocumentUtil.getString(savedPersonDocument, "id_card_number")); //身份证号(可以不准) jsonObject.put("gender", MutableDocumentUtil.getString(savedPersonDocument, "")); //性别(可空) jsonObject.put("phone", MutableDocumentUtil.getString(savedPersonDocument, "phone")); //手机号(可空) jsonObject.put("distributionIds", MutableDocumentUtil.getString(savedPersonDocument, "")); //集群id(必需) jsonObject.put("distributionNames", MutableDocumentUtil.getString(savedPersonDocument, "")); //集群名称(必需) jsonObject.put("deviceId", SlDeviceManager.getDeviceId()); //设备id:例如: DSPAD010120181101(类似这种之前统一规定的设备id) String camera_image_fastdfs_path = MutableDocumentUtil.getString(savedPersonDocument, "camera_image_fastdfs_path"); if (camera_image_fastdfs_path == null || camera_image_fastdfs_path.length() == 0) { byte[] camera_image_path = savedPersonDocument.getBlob("camera_image_path"); if (camera_image_path != null && camera_image_path != null) { String picPath = FastDFSUtil.upLoadVisitorPic(camera_image_path, System.currentTimeMillis()); savedPersonDocument.setString("camera_image_fastdfs_path", picPath); } } jsonObject.put("photos", MutableDocumentUtil.getString(savedPersonDocument, "camera_image_fastdfs_path")); //图片的fstdfs路径(必需) byte[] camera_image_feature = savedPersonDocument.getBlob("camera_image_feature"); if (camera_image_feature != null && camera_image_feature != null) { jsonObject.put("featureBase64", Base64.encodeToString(camera_image_feature, Base64.NO_WRAP)); //图片的特征值(必需) } jsonArray.put(jsonObject); String bodyJsonContent = jsonArray.toString(); // System.out.println("bodyJsonContent=" + bodyJsonContent); params.setBodyContent(bodyJsonContent); params.setAsJsonContent(true); x.http().post(params, new Callback.CommonCallback() { public void onSuccess(String result) { // System.out.println("http上传人员成功"); } public void onError(Throwable ex, boolean isOnCallback) { ex.printStackTrace(); System.out.println("httponError"); } public void onCancelled(CancelledException cex) { System.out.println("httponCancelled"); } public void onFinished() { // System.out.println("httponFinished"); } }); } catch (Exception e) { e.printStackTrace(); } } }); } /*删除人员*/ public static void deletePerson(ModelAdapter modelAdapter) { try { delete(modelAdapter); } catch (Exception e) { e.printStackTrace(); } } /** * 获取所有人员信息的列表 */ public static List getPersonList(String sign_up_status) { List allPersonList = new ArrayList<>(); // Expression expression = Expression.property("table").equalTo(Expression.string("person")); // expression = expression.and(Expression.property("sign_up_status").equalTo(Expression.string(sign_up_status))); //findPage(Expression.booleanValue(true),10,1); // Ordering[] a = new Ordering[1]; // a[0] = Ordering.property("sign_up_time").descending(); // List documentList = findList("select * from person where sign_up_status='"+sign_up_status+"' order by sign_up_time desc"); String del_flag = "0"; if (syncTableNames.contains("person")) { del_flag = Base64Util.encodeToString("person","del_flag",del_flag); sign_up_status = Base64Util.encodeToString("person","sign_up_status",sign_up_status); } List documentList = findList("select * from person where del_flag ='"+del_flag+"' and sign_up_status='"+sign_up_status+"' order by sign_up_time desc"); // 过滤掉不是本设备的系统管理员 for (ModelAdapter person : documentList) { if (!"1".equals(person.getString("auto_init")) || ("1".equals(person.getString("auto_init")) && SlDeviceManager.getDeviceId().equals(person.getString("device_id")))) { // 过滤掉人脸特征为空的人 if (person.getBlob("camera_image_feature") != null || ("1".equals(person.getString("auto_init")) && SlDeviceManager.getDeviceId().equals(person.getString("device_id")))){ allPersonList.add(person); } } // String camera_image_feature_path = Base64Util.featureBytes2Base64(person.getBlob("camera_image_feature_path")); // System.out.println(person.getString("id")+"1读取feature base64="+camera_image_feature_path); // System.out.println(person.getString("id")+"2读取feature base64="+person.getString("camera_image_feature")); } return allPersonList; // return findList(expression, a); } static Map findPersonByIdMap = new HashMap<>(); static long lastFindPersonById = System.currentTimeMillis(); public static ModelAdapter findPersonById(String personId) { ModelAdapter person = findPersonByIdMap.get(personId); if (System.currentTimeMillis() - lastFindPersonById < 1000 && person != null) { return person; } else { person = findById("person", personId); findPersonByIdMap.put(personId, person); lastFindPersonById = System.currentTimeMillis(); } return person;// 已经在父类处理空指针的情况 } // 获取含有特定身份的所有人员 public static List getIdentityPersonList(List allPersonList, Map checkedIdentityMap) { List allPersonIdList = new ArrayList<>();// 获取符合身份的所有人员信息 List personList = new ArrayList<>(); Map checkedPerson = new HashMap<>(); personList.clear(); allPersonIdList.clear(); checkedPerson.clear(); // 获取符合身份的所有人员信息 for (String ruleId : checkedIdentityMap.keySet()) { allPersonIdList.addAll(findList("select * from person_identity where identity_id='"+ruleId+"'")); } for (int j = 0; j < allPersonList.size(); j++) { for (int i = 0; i < allPersonIdList.size(); i++) { if (allPersonList.get(j).getId().equals(allPersonIdList.get(i).getString("person_id")) && !checkedPerson.containsKey(allPersonIdList.get(i).getString("person_id"))) { checkedPerson.put(allPersonIdList.get(i).getString("person_id"), allPersonList.get(j)); ModelAdapter personDocument = allPersonList.get(j); if (personDocument != null) { personList.add(personDocument); } } } } return personList; } public static boolean isDuplicate(ModelAdapter selectedPersonDocument) { try { byte[] camera_image_feature = selectedPersonDocument.getBlob("camera_image_feature"); if (camera_image_feature != null && camera_image_feature != null) { String compareResultStr = FaceId.instance.compareFeatureInDb(camera_image_feature, Constants.minRecognizeScoe); ModelAdapter person = SlPersonManager.findPersonById(compareResultStr.split(",", -1)[0]); if (person != null) { return true; } } } catch (Exception e) { e.printStackTrace(); } return false; } public static void reFindPerson(CompareFeatureResult compareFeatureResult) { try { if (compareFeatureResult.person != null) { compareFeatureResult.person = SlPersonManager.findPersonById(compareFeatureResult.personId); } if (compareFeatureResult.person == null) { compareFeatureResult.personId = ""; } } catch (Exception e) { compareFeatureResult.person = null; compareFeatureResult.personId = ""; e.printStackTrace(); } } // 人员注册时选中的为有效时间内通行,返回的为可以通行的时间规则 public static List getValidSignUpRuleList(ModelAdapter person) { List checkedTimeRuleList = new ArrayList<>(); String checked_time_rule_id = person.getString("checked_time_rule_id"); if (!TextUtils.isEmpty(checked_time_rule_id)) { if (SlTimeRuleManager.timeRuleIsValid(checked_time_rule_id)) { ModelAdapter checked_time_rule = findById("time", checked_time_rule_id); checkedTimeRuleList.add(checked_time_rule); } } return checkedTimeRuleList; } // 人员注册时选中的为有效时间内通行,提前多久提示,返回的为可以通行的时间规则 public static List getValidSignUpRuleListButTimeNotReach(ModelAdapter person) { List checkedTimeRuleList = new ArrayList<>(); long noReachTime = SlHintDoorAccessManager.getNoReachTime(); String checked_time_rule_id = person.getString("checked_time_rule_id"); if (!TextUtils.isEmpty(checked_time_rule_id)) { // if (TimeRuleManager.timeRuleIsValid(checked_time_rule_id),noReachTime * 1000){ if (SlTimeRuleManager.timeRuleIsValid(checked_time_rule_id, noReachTime * 60 * 1000)) { ModelAdapter checked_time_rule = findById("time", checked_time_rule_id); checkedTimeRuleList.add(checked_time_rule); } } return checkedTimeRuleList; } }