package com.basic.security.manager.impl.sqlite;
|
|
import android.text.TextUtils;
|
|
import com.basic.security.base.BaseApplication;
|
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 org.apache.commons.io.FileUtils;
|
|
import java.io.File;
|
import java.util.List;
|
|
import static com.basic.security.base.BaseFragment.saveBlob;
|
|
public class SlTemporaryPersonManager extends SlBaseManager {
|
|
public static List<ModelAdapter> findTemporaryPersonList() {
|
return SlBaseManager.findList("select * from temporary_person");
|
}
|
|
|
public static List<ModelAdapter> getTemporaryPersonList(String ip) {
|
List<ModelAdapter> list = findList("select * from temporary_person where ip='" + ip + "' order by save_time desc ");
|
// 如果临时人员头像路径为空,删除此临时人员
|
for (ModelAdapter tempPerson : list) {
|
// if (null == tempPerson.getBlob("camera_image_path")) {
|
// deleteTempPersonAndAttachment(tempPerson);
|
// }
|
if (null == tempPerson.model.get("camera_image_path")) {
|
deleteTempPersonAndAttachment(tempPerson);
|
}
|
}
|
// 清理大于50个的临时人员
|
// if (list.size() > 50) {
|
//// for (int i = 50; i < list.size(); i++) {
|
//// FaceId.instance.removeFeatureFromDb(list.get(i).getId());
|
//// deleteTempPersonAndAttachment(list.get(i));
|
//// }
|
//// return list.subList(0, 50);
|
// FaceId.instance.removeFeatureFromDb(list.get(0).getId());
|
// deleteTempPersonAndAttachment(list.get(0));
|
// return list.subList(1,list.size());
|
// }
|
return list;
|
|
}
|
|
public static void saveTemporaryPerson(FacePosition featureDocument) {
|
if (featureDocument != null) {
|
// 判断是否在库中已存在
|
String compareResultStr = FaceId.instance.compareFeatureInTempDb(featureDocument.featureData, 80);
|
String personId = compareResultStr.split(",", -1)[0];
|
// System.out.println("======" + compareResultStr);
|
if (TextUtils.isEmpty(personId) || findById("temporary_person", personId) == null) { // 如果不存在,保存
|
saveTempPerson(featureDocument);
|
} else { // 如果存在,看是否存在与相同的设备中(根据ip判断)
|
ModelAdapter personDocument = findById("temporary_person", personId);
|
if (personDocument != null) {
|
String deviceIp = SlDeviceManager.getDeviceIp();
|
if (!TextUtils.isEmpty(deviceIp)) {
|
if (!SlDeviceManager.getDeviceIp().equals(personDocument.getString("ip"))) { // 不是在相同的ip地址中保存,保存
|
saveTempPerson(featureDocument);
|
} else { // 是在相同的ip地址中保存,删除重新保存(暂时不删除,)
|
// deleteTempPersonAndAttachment(personDocument);
|
saveTempPerson(featureDocument);
|
}
|
}
|
}
|
}
|
}
|
}
|
|
public static void deleteTempPersonAndAttachment(ModelAdapter modelAdapter) {
|
try {
|
File camera_image_pathFile = new File(modelAdapter.getString("camera_image_path"));
|
if (camera_image_pathFile.exists()) {
|
FileUtils.forceDelete(camera_image_pathFile);
|
}
|
File camera_image_featureFile = new File(modelAdapter.getString("camera_image_feature"));
|
if (camera_image_featureFile.exists()) {
|
FileUtils.forceDelete(camera_image_featureFile);
|
}
|
String id = modelAdapter.getString("id");
|
if (!TextUtils.isEmpty(id)) {
|
FaceId.instance.removeFeatureFromTempDb(id);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
deletePhysically(modelAdapter);
|
}
|
|
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 {
|
// System.out.println(System.currentTimeMillis()+"saveTempPerson deleteMoreThan 前");
|
SlTemporaryPersonManager.deleteMoreThan(50);
|
SlTemporaryPersonManager.save(modelAdapter);
|
}
|
}
|
|
|
public static void deleteMoreThan(int rows) {
|
// System.out.println(System.currentTimeMillis()+"deleteMoreThan 里面");
|
String sql = "select * from temporary_person order by save_time desc limit " + rows + ",1000000 ";
|
List<ModelAdapter> modelAdapterList = findList(sql);
|
for (ModelAdapter modelAdapter : modelAdapterList) {
|
deleteTempPersonAndAttachment(modelAdapter);
|
}
|
|
}
|
|
|
}
|