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<String, ModelAdapter> 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<String>() {
|
// 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<String>() {
|
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<ModelAdapter> getPersonList(String sign_up_status) {
|
List<ModelAdapter> 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<ModelAdapter> 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<ModelAdapter> 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<ModelAdapter> getIdentityPersonList(List<ModelAdapter> allPersonList, Map<String, ModelAdapter> checkedIdentityMap) {
|
List<ModelAdapter> allPersonIdList = new ArrayList<>();// 获取符合身份的所有人员信息
|
List<ModelAdapter> personList = new ArrayList<>();
|
Map<String, ModelAdapter> 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<ModelAdapter> getValidSignUpRuleList(ModelAdapter person) {
|
List<ModelAdapter> 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<ModelAdapter> getValidSignUpRuleListButTimeNotReach(ModelAdapter person) {
|
|
List<ModelAdapter> 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<ModelAdapter> findPersonList(String s) {
|
return findList(s);
|
}
|
}
|