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.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.basic.security.model.ModelAdapter; 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 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 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); } } }