package com.basic.security.manager; import android.text.TextUtils; import android.util.Base64; import com.basic.security.manager.impl.cblite.DeviceManager; import com.basic.security.manager.impl.es.ReadConfig; import com.basic.security.manager.impl.sqlite.SlBaseManager; import com.basic.security.manager.impl.sqlite.SlDeviceManager; import com.basic.security.manager.impl.sqlite.SlTimeRuleManager; import com.basic.security.model.ModelAdapter; import com.basic.security.model.Person; 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 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.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class PersonManager extends SlBaseManager { static Map findPersonByIdMap = new HashMap<>(); static long lastFindPersonById = System.currentTimeMillis(); // 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 savePerson(ModelAdapter personDocument) { save(personDocument); // uploadToTemporary(personDocument.getId()); String autoInit = personDocument.getString("auto_init"); if (TextUtils.isEmpty(autoInit) || "0".equals(autoInit)) { uploadToTemporary(personDocument.getId()); } } public static void uploadToTemporary(String personId) { BackgroundExecutor.execute(new BackgroundExecutor.Task("", 0, "") { public void execute() { try { ModelAdapter savedPersonDocument = PersonManager.findById("person", personId); RequestParams params = new RequestParams("http://" + ReadConfig.getInstance().getTempHost() + ":" + ReadConfig.getInstance().getTempPort() + "" + ReadConfig.getInstance().getTempUrl() + ""); // params.addHeader("Content-Type", "application/json"); params.addHeader("Content-Type", "application/json-rpc"); JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); if (savedPersonDocument == null) { return; } 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", DeviceManager.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) { System.out.println("PersonManager.execute " + e.getMessage()); // e.printStackTrace(); } } }); } /*删除人员*/ public static void deletePerson(ModelAdapter modelAdapter) { try { delete(modelAdapter); FaceId.instance.removeFeatureFromDb(modelAdapter.getString(Person.id)); String camera_image_path = ModelAdapter.getAttachmentPath(modelAdapter.getId(), Person.camera_image_path, Person.tableName); if (!TextUtils.isEmpty(camera_image_path)) { File camera_image_path_file = new File(camera_image_path); if (camera_image_path_file.exists()) { camera_image_path_file.delete(); } } } 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 (BaseManager.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); } 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.minRecognizeScore); ModelAdapter person = PersonManager.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 != null) { if (compareFeatureResult.person != null) { compareFeatureResult.person = PersonManager.findPersonById(compareFeatureResult.personId); } if (compareFeatureResult.person == null) { compareFeatureResult.personId = ""; } } } catch (Exception e) { if (compareFeatureResult != null) { 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 = HintDoorAccessManager.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; } public static List findPersonList(String s) { return findList(s); } }