DeteMin
2020-03-31 77c62e023d2dc31200fc696158df84b3aee90ee7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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);
        }
    }
 
 
}