a
554325746@qq.com
2020-01-02 e52632329ef8342a2f692bf58184fc54db3d2b4c
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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);
        }
 
    }
 
 
}