package com.basic.security.manager.impl.cblite;
|
|
import android.text.TextUtils;
|
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.manager.impl.sqlite.SlTemporaryPersonManager;
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.FaceId;
|
import com.basic.security.utils.FacePosition;
|
import com.basic.security.utils.IpUtils;
|
import com.couchbase.lite.Expression;
|
import com.couchbase.lite.Ordering;
|
|
import java.util.List;
|
|
import static com.basic.security.base.BaseFragment.saveBlob;
|
|
public class TemporaryPersonManager extends BaseManager {
|
|
public static List<ModelAdapter> getTemporaryPersonList(String ip) {
|
if (Constants.useCouchbase) {
|
Expression expression = Expression.property("table").equalTo(Expression.string("temporary_person"))
|
.and(Expression.property("ip").equalTo(Expression.string(ip)));
|
// 存储时间排序
|
Ordering[] orderings = new Ordering[1];
|
orderings[0] = Ordering.property("save_time").descending();
|
List<ModelAdapter> list = findList(expression, orderings);
|
// 清理大于50个的临时人员
|
if (list.size() > 50) {
|
for (int i = 50; i < list.size(); i++) {
|
FaceId.instance.removeFeatureFromDb(list.get(i).getId());
|
delete(list.get(i));
|
}
|
return list.subList(0, 50);
|
}
|
return list;
|
} else {
|
return SlTemporaryPersonManager.getTemporaryPersonList(ip);
|
}
|
|
}
|
|
public static void saveTemporaryPerson(FacePosition featureDocument) {
|
if (Constants.useCouchbase) {
|
if (featureDocument != null) {
|
// 判断是否在库中已存在
|
String compareResultStr = FaceId.instance.compareFeatureInTempDb(featureDocument.featureData, 70);
|
String personId = compareResultStr.split(",", -1)[0];
|
//System.out.println("======" + compareResultStr);
|
if (TextUtils.isEmpty(personId) || findById(personId) == null) { // 如果不存在,保存
|
saveTempPerson(featureDocument);
|
} else { // 如果存在,看是否存在与相同的设备中(根据ip判断)
|
ModelAdapter personDocument = findById(personId);
|
if (!DeviceManager.getDeviceIp().equals(personDocument.getString("ip"))) { // 不是在相同的ip地址中保存,保存
|
saveTempPerson(featureDocument);
|
} else { // 是在相同的ip地址中保存,删除重新保存
|
delete(personDocument);
|
saveTempPerson(featureDocument);
|
}
|
}
|
}
|
} else {
|
SlTemporaryPersonManager.saveTemporaryPerson(featureDocument);
|
}
|
}
|
|
private static void saveTempPerson(FacePosition featureDocument) {
|
ModelAdapter modelAdapter = new ModelAdapter();
|
modelAdapter.setString("table", "temporary_person");
|
modelAdapter.setString("save_time", System.currentTimeMillis() + "");
|
modelAdapter.setString("ip", IpUtils.getIpAddress(BaseApplication.getApplication()));
|
saveBlob(modelAdapter, "camera_image_path", featureDocument.faceJpgData());
|
saveBlob(modelAdapter, "camera_image_feature", featureDocument.featureData);
|
FaceId.instance.addFeatureToTempDb(modelAdapter.getId(), featureDocument.featureData);
|
if (Constants.useCouchbase) {
|
save(modelAdapter);
|
} else {
|
SlTemporaryPersonManager.deleteMoreThan(50);
|
SlTemporaryPersonManager.save(modelAdapter);
|
}
|
}
|
|
|
}
|