a
554325746@qq.com
2019-12-25 603cb36a5123e46656b06a5deb8d7ac7ff81307f
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
package com.basic.security.manager;
 
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.hardware.display.DisplayManager;
import android.os.SystemClock;
import android.view.Display;
 
import com.basic.security.activity.MainActivity;
import com.basic.security.base.BaseApplication;
import com.basic.security.model.ModelAdapter;
import com.basic.security.model.Org;
import com.basic.security.model.Person;
import com.basic.security.model.Sync;
import com.basic.security.secondary.SecondaryDisplay;
import com.basic.security.utils.Constants;
import com.basic.security.utils.socket.outdoor.OutdoorSendIpSocketClientFromBaseSetting;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class SystemInitManager {
    public static DisplayManager displayManager = null;
    public static Display[] presentationDisplays = null;
    public static SecondaryDisplay secondaryDisplay;
    public static boolean isSecondaryDisplay = false;
 
    public static void initTablesAndDefaultValues() {
        BaseApplication.getApplication().executorService.execute(() -> {
            createTablesInBaseDatabase();
            createTablesInCacheDatabase();
            createTablesInSyncDatabase();
            initDefaultValues();
            FeatureManager.initCppFeatureMap();
        });
    }
 
    public static void initDefaultValues() {
        try {
            while (!MainActivity.allUiLoaded) {
                SystemClock.sleep(100);
            }
            if (Constants.isIndoor) {
                RemoteOutdoorManager.initTwoOutdoors();
            }
            ModelAdapter schoolOrg = OrgManager.buildParentOrg();
            String deviceId = DeviceManager.getDeviceId();
            ModelAdapter adminIdentity = BaseManager.findById("identity", "adminIdentity");
            if (adminIdentity == null) {
                adminIdentity = new ModelAdapter("adminIdentity");
                adminIdentity.setString("table", "identity");
                adminIdentity.setString("name", "管理员");
                adminIdentity.setString("auto_init", "1");
                adminIdentity.setString("device_id", DeviceManager.getDeviceId());
                adminIdentity.setString("company_id", CompanyManager.getCompanyId());
                adminIdentity.setString(Sync.needSync, Constants.FALSE);
                IdentityManager.save(adminIdentity);
            }
            ModelAdapter teacherIdentity = BaseManager.findById("identity", "teacherIdentity");
            if (teacherIdentity == null) {
                teacherIdentity = new ModelAdapter("teacherIdentity");
                teacherIdentity.setString("table", "identity");
                teacherIdentity.setString("name", "老师");
                teacherIdentity.setString("device_id", DeviceManager.getDeviceId());
                teacherIdentity.setString("company_id", CompanyManager.getCompanyId());
                teacherIdentity.setString(Sync.needSync, Constants.FALSE);
                IdentityManager.save(teacherIdentity);
            }
            ModelAdapter insiderIdentity = BaseManager.findById("identity", "insiderIdentity");
            if (insiderIdentity == null) {
                insiderIdentity = new ModelAdapter("insiderIdentity");
                insiderIdentity.setString("table", "identity");
                insiderIdentity.setString("name", "内部人员");
                insiderIdentity.setString("device_id", DeviceManager.getDeviceId());
                insiderIdentity.setString("company_id", CompanyManager.getCompanyId());
                insiderIdentity.setString(Sync.needSync, Constants.FALSE);
                IdentityManager.save(insiderIdentity);
            }
            ModelAdapter studentIdentity = BaseManager.findById("identity", "studentIdentity");
            if (studentIdentity == null) {
                studentIdentity = new ModelAdapter("studentIdentity");
                studentIdentity.setString("table", "identity");
                studentIdentity.setString("name", "学生");
                studentIdentity.setString("device_id", DeviceManager.getDeviceId());
                studentIdentity.setString("company_id", CompanyManager.getCompanyId());
                studentIdentity.setString(Sync.needSync, Constants.FALSE);
                IdentityManager.save(studentIdentity);
            }
            ModelAdapter guestIdentity = BaseManager.findById("identity", "guestIdentity");
            if (guestIdentity == null) {
                guestIdentity = new ModelAdapter("guestIdentity");
                guestIdentity.setString("table", "identity");
                guestIdentity.setString("name", "访客");
                guestIdentity.setString("device_id", DeviceManager.getDeviceId());
                guestIdentity.setString("company_id", CompanyManager.getCompanyId());
                guestIdentity.setString(Sync.needSync, Constants.FALSE);
                IdentityManager.save(guestIdentity);
            }
            ModelAdapter admin_person = BaseManager.findById("person", "admin_person");
            if (admin_person == null) {
                admin_person = new ModelAdapter("admin_person")
                        .setString("name", "系统管理员")
                        .setString("sign_up_status", "已注册")
                        .setString("verify_status", "不需要验证身份证")
                        .setString("sign_up_method", "系统初始化分配")
                        .setString(Person.sign_up_rule, "允许通行")
                        .setString("sign_up_time", System.currentTimeMillis() + "")
                        .setString("device_id", DeviceManager.getDeviceId())
                        //是系统初始化默认设定的  不能删除这个person的管理员身份
                        .setString("auto_init", "1")
                        .setString(Person.org_id, schoolOrg.getString(Org.id))
                        .setString(Person.org_ids, schoolOrg.getString(Org.ids))
                        .setString("company_id", CompanyManager.getCompanyId())
                        .setString("table", "person");
                admin_person.setString(Sync.needSync, Constants.FALSE);
                PersonManager.savePerson(admin_person);
            }
            ModelAdapter adminUser = BaseManager.findById("user", "admin_user");
            if (adminUser == null) {
                adminUser = new ModelAdapter("admin_user")
                        .setString("table", "user")
                        .setString("name", "系统管理员")
                        .setString("person_id", admin_person.getId())
                        .setString("username", "admin")
                        .setString("auto_init", "1")
                        .setString("password", "admin123")
                        .setString("device_id", DeviceManager.getDeviceId())
                        .setString("company_id", CompanyManager.getCompanyId());
                adminUser.setString(Sync.needSync, Constants.FALSE);
                UserManager.saveUser(adminUser);
            }
            ModelAdapter basicUser = BaseManager.findById("user", "basic_user");
            if (basicUser == null) {
                basicUser = new ModelAdapter("basic_user")
                        .setString("table", "user")
                        .setString("name", "系统管理员")
                        .setString("person_id", "")
                        .setString("username", "basic")
                        .setString("auto_init", "1")
                        .setString("password", "basic123")
                        .setString("device_id", DeviceManager.getDeviceId())
                        .setString("company_id", CompanyManager.getCompanyId());
                basicUser.setString(Sync.needSync, Constants.FALSE);
                UserManager.saveUser(basicUser);
            }
            ModelAdapter admin_person_identity = BaseManager.findById("person_identity", "admin_person_identity");
            if (admin_person_identity == null) {
                admin_person_identity = new ModelAdapter("admin_person_identity")
                        .setString("table", "person_identity")
                        .setString("identity_id", adminIdentity.getId())
                        .setString("auto_init", "1")
                        .setString("person_id", admin_person.getId())
                        .setString("device_id", DeviceManager.getDeviceId())
                        .setString("company_id", CompanyManager.getCompanyId());
                admin_person_identity.setString(Sync.needSync, Constants.FALSE);
                PersonIdentityManager.savePersonIdentity(admin_person_identity);
            }
            BaseSettingManager.initBaseSetting();
            DeviceManager.initDevice();
            HintDoorAccessManager.initHintDoorAccess();
            HintRecognizeManager.initHintRecognize();
            HintSignUpManager.initHintSignUp();
            ClusterSettingManager.initCluster();
            if (Constants.isUseSerf) {
                ClusterSettingManager.start();
            }
            while (!MainActivity.mainActivityInitComplete) {
                SystemClock.sleep(200);
            }
            MainActivity mainActivity = BaseApplication.getApplication().activity;
            if (Constants.indoorOutdoorInOne) {
                try {
                    ModelAdapter adminAccount = UserManager.getUserByName("admin");
                    UserManager.setAdminUser(adminAccount);
                    UserManager.setIsBasic(false);
                    if (BaseSettingManager.isGuestMode()) {
                        mainActivity.fragment_guest_mode.loadData = true;
                        mainActivity.showFragment(mainActivity.fragment_guest_mode);
                        mainActivity.fragment_toolbar.visitor_model();
                        mainActivity.fragment_guest_mode.loadData();
                    } else {
                        mainActivity.fragment_toolbar.person_manage();
                    }
                    mainActivity.fragment_toolbar.toggleGuestModeButton();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                showSecondDisplay(mainActivity);
            }
            if (Constants.isOutdoor) {
                OutdoorSendIpSocketClientFromBaseSetting outdoorSocketClient = new OutdoorSendIpSocketClientFromBaseSetting();
                outdoorSocketClient.start();
                mainActivity.showFragment(mainActivity.fragment_home);
            }
            PersonCameraImagePathManager.startUploadCameraImagePath();
            PersonCameraImagePathManager.startDownloadCameraImagePath();
            OrgManager.initTreeNodeList();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public static void showSecondDisplay(MainActivity mainActivity) {
        if (isSecondaryDisplay) {
            return;
        }
        isSecondaryDisplay = true;
        mainActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    displayManager = (DisplayManager) mainActivity.getSystemService(Context.DISPLAY_SERVICE);
                    if (displayManager != null) {
                        presentationDisplays = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
                        if (presentationDisplays.length > 0) {
                            if (secondaryDisplay == null) {
                                secondaryDisplay = new SecondaryDisplay(mainActivity, presentationDisplays[0]);
                            }
                            secondaryDisplay.show();
                            mainActivity.secondaryDisplay = secondaryDisplay;
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
 
    public static void hideSecondDisplay(MainActivity mainActivity) {
        if (!isSecondaryDisplay) {
            return;
        }
        isSecondaryDisplay = false;
        mainActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    if (secondaryDisplay != null) {
                        secondaryDisplay.hide();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
 
    public static void createTablesInCacheDatabase() {
        try {
            SQLiteDatabase cacheDatabase = SQLiteDatabase.openOrCreateDatabase(
                    Constants.cacheDatabasePath, null);
            cacheDatabase.execSQL("CREATE TABLE\n" +
                    "IF NOT EXISTS SqlCache (\n" +
                    "    uuid TEXT PRIMARY KEY,\n" +
                    "    func TEXT DEFAULT NULL,\n" +
                    "    sql TEXT DEFAULT NULL,\n" +
                    "    create_time TEXT,\n" +
                    "    create_by TEXT\n" +
                    ")");
            cacheDatabase.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_sql_cache ON SqlCache (uuid)");
            cacheDatabase.execSQL("CREATE TABLE\n" +
                    "IF NOT EXISTS sql_cache_device (\n" +
                    "    sql_cache_id TEXT ,\n" +
                    "    receive_device_id TEXT, \n" +
                    " CONSTRAINT idx_sql_cache_device UNIQUE (sql_cache_id, receive_device_id)" +
                    ")");
            cacheDatabase.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public static void createTablesInBaseDatabase() {
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS base_setting (reboot_hour TEXT, reboot_hour_enable TEXT,normally_closed text, open_door_password TEXT, open_door_password_enable TEXT, \"open_door_duration\" TEXT, \"auto_register_rule\" TEXT, \"auto_checked_time_rule_id\" TEXT, \"device_pass_mode\" TEXT, \"relation_person\" TEXT, \"relation_device\" TEXT, \"indoor_device_id\" TEXT,\"indoor_device_ip\" TEXT,\"no_face_delay\" TEXT,\"picture_rotation_angle\" TEXT,\"id\" TEXT, \"auto_mode\" TEXT, \"admin_mode\" TEXT, \"pass_mode\" TEXT, \"visitor_mode\" TEXT, \"admin_normal_verify\" TEXT, \"admin_normal_verify_phone\" TEXT, \"admin_normal_verify_idcard\" TEXT, \"admin_normal_verify_name\" TEXT, \"admin_idcard_verify\" TEXT, \"admin_idcard_verify_phone\" TEXT, \"back_to_home\" TEXT, \"image_play_interval\" TEXT, \"detect_multiple_face\" TEXT, \"face_ratio\" TEXT, \"face_angle\" TEXT, \"image_play_time\" TEXT, \"login_expire_long\" TEXT, \"auto_mode_verify_phone\" TEXT, \"auto_normal_verify\" TEXT, \"auto_normal_verify_phone\" TEXT, \"auto_normal_verify_idcard\" TEXT, \"auto_normal_verify_name\" TEXT, \"auto_idcard_verify\" TEXT, \"auto_idcard_verify_phone\" TEXT, \"auto_register_identity_id\" TEXT, \"auto_register_identity_name\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_base_setting ON base_setting (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS business (\"id\" TEXT, \"business_name\" TEXT, \"create_time\" TEXT, \"only_allow\" TEXT, \"only_allow_start\" TEXT, \"only_allow_end\" TEXT, \"choose_from_time_rule\" TEXT, \"checked_time_rule_id\" TEXT, \"access_table_name\" TEXT,\"access_identity\" TEXT, \"access_name\" TEXT, \"access_hint\" TEXT, \"not_reached_time_hint\" TEXT, \"not_reached_time_remind\" TEXT, \"time_unit\" TEXT, \"confirm_pass_identity\" TEXT, \"confirm_pass_name\" TEXT, \"confirm_pass_hint\" TEXT, \"time_ids\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_business ON business (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS business_person (\"id\" TEXT, \"person_id\" TEXT, \"business_id\" TEXT, \"pass_model\" TEXT, \"contact_person\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_business_person ON business_person (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS confirm (\"id\" TEXT, \"from_device_id\" TEXT, \"from_person_id\" TEXT, \"from_time\" TEXT, \"valid_long\" TEXT, \"confirm_device_id\" TEXT, \"confirm_user_id\" TEXT, \"confirm_time\" TEXT, \"del_flag\" TEXT, \"company_id\" TEXT, \"table\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_confirm ON confirm (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS device (\"id\" TEXT, \"name\" TEXT, \"ip\" TEXT, \"mask\" TEXT, \"gateway\" TEXT, \"no_face_delay\" TEXT, \"address\" TEXT, \"server_ip\" TEXT, \"apply_device_ids\" TEXT, \"device_id\" TEXT, \"open_door_time\" TEXT, \"company_id\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_device ON device (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS hint_door_access (\"id\" TEXT, \"name\" TEXT, \"device_id\" TEXT, \"no_register\" TEXT, \"company_id\" TEXT, \"access_identity\" TEXT, \"access_name\" TEXT, \"access_hint\" TEXT, \"not_reached_time_hint\" TEXT, \"not_reached_time_remind\" TEXT, \"confirm_pass_identity\" TEXT, \"confirm_pass_name\" TEXT, \"confirm_pass_hint\" TEXT, \"refuse_pass_identity\" TEXT, \"refuse_pass_name\" TEXT, \"refuse_pass_hint\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_hint_door_access ON hint_door_access (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS hint_recognize_message (\"id\" TEXT, \"name\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"head_up\" TEXT, \"head_up_message\" TEXT, \"head_down\" TEXT, \"head_down_message\" TEXT, \"face_max\" TEXT, \"face_max_message\" TEXT, \"face_min\" TEXT, \"face_min_message\" TEXT, \"rotation_left\" TEXT, \"rotation_left_message\" TEXT, \"rotation_right\" TEXT, \"rotation_right_message\" TEXT, \"all_fit\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_hint_recognize_message ON hint_recognize_message (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS hint_sign_up (\"id\" TEXT, \"name\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"id_card_message\" TEXT, \"id_card_success\" TEXT, \"id_card_fail\" TEXT, \"edit_message\" TEXT, \"register_success\" TEXT, \"wait_admin\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_hint_sign_up ON hint_sign_up (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS identity (\"id\" TEXT, \"name\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_identity ON identity (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS org (\"id\" TEXT, \"leaf\" TEXT, \"ids\" TEXT, \"pid\" TEXT, \"name\" TEXT, \"names\" TEXT,  \"p_names\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_org ON org (id)");
        DatabaseManager.execSQL("CREATE INDEX IF NOT EXISTS pidx_org ON org (pid)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS person (\"camera_image_path_upload\" text,\"camera_image_path_exist\" text,\"guest_allow_start_time\" text,\"respondent_ids\" text,\"respondent_names\" text,\"visit_status\" text,\"visit_valid_time\" text,\"visit_exit_time\" text,\"camera_image_feature_path\" text, \"student_id\" text, \"org_id\" text, \"org_ids\" text, \"checked_time_rule_id\" TEXT, \"sign_up_rule\" TEXT,\"id\" TEXT, \"name\" TEXT, \"camera_image_path\" TEXT, \"camera_image_feature\" TEXT, \"camera_image_fastdfs_path\" TEXT, \"id_card_number\" TEXT, \"id_card_image_path\" TEXT, \"id_card_image_feature\" TEXT, \"type\" TEXT, \"phone\" TEXT, \"sign_up_time\" TEXT, \"sign_up_method\" TEXT, \"sign_up_status\" TEXT, \"verify_status\" TEXT, \"auto_init\" TEXT, \"update_time\" TEXT, \"del_flag\" TEXT, \"all_device\" TEXT, \"company_id\" TEXT, \"table\" TEXT, \"device_id\" TEXT, \"guest_enter_time\" TEXT, \"guest_visit_status\" TEXT,\"guest_visit_valid_time\" TEXT,\"guest_exit_time\" TEXT,\"guest_visit_reason\" TEXT,\"guest_remark\" TEXT,PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_person ON person (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS guest (\"track_id\" TEXT,\"score\" TEXT,\"verified_id_card\" TEXT,\"id_card_number\" TEXT,\"name\" TEXT,\"id\" TEXT, \"person_id\" TEXT, \"camera_image_path\" TEXT, \"camera_image_feature\" TEXT, \"camera_id\" TEXT, \"create_time\" INTEGER, \"table\" TEXT, \"device_id\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_guest ON guest (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS person_identity (\"id\" TEXT, \"person_id\" TEXT, \"identity_id\" TEXT, \"del_flag\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"table\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_person_identity ON person_identity (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS temporary_person (\"id\" TEXT, \"save_time\" TEXT, \"ip\" TEXT, \"camera_image_path\" TEXT, \"camera_image_feature\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_temporary_person ON temporary_person (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS time (\"id\" TEXT, \"time_rule_name\" TEXT, \"week_json\" TEXT, \"date_json\" TEXT, \"is_use\" TEXT, \"del_flag\" TEXT, \"table\" TEXT, PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_time ON time (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS user (\"id\" TEXT, \"person_id\" TEXT, \"username\" TEXT, \"password\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_user ON user (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS visit (\"target_id_number\" TEXT,\"target_phone\" TEXT,\"target_identity\" TEXT,\"id\" TEXT, \"person_id\" TEXT, \"person_name\" TEXT, \"device_name\" TEXT, \"visit_time\" TEXT, \"verify_result\" TEXT, \"exit_time\" TEXT, \"target_person_id\" TEXT, \"target_person_name\" TEXT, \"target_org_id\" TEXT, \"target_org_name\" TEXT, \"del_flag\" TEXT, \"person_id_number\" TEXT, \"person_phone\" TEXT, \"person_type\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"table\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_visit ON visit (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS business_apply_device (\"id\" TEXT, \"business_id\" TEXT, \"device_id\" TEXT, \"table\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_business_apply_device ON business_apply_device (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS OfficeDevice (\"id\" TEXT,\"deviceIp\" TEXT, \"deviceName\" TEXT, \"device_id\" TEXT, \"company_id\" TEXT, \"ip\" TEXT, \"valid\" TEXT, \"del_flag\" TEXT,  PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_OfficeDevice ON OfficeDevice (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS outdoor (\"id\" TEXT, \"outdoor_device_id\" TEXT, \"outdoor_device_name\" TEXT, \"update_time\" INTEGER, \"outdoor_device_ip\" TEXT, \"valid\" TEXT, \"device_id\" TEXT, \"table\" TEXT, PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_outdoor ON outdoor (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS id_card (\"id\" TEXT,\"name\" TEXT,\"card_number\" TEXT,\"birthday\" TEXT,\"gender\" TEXT,\"head_path\" TEXT,\"create_time\" TEXT, \"device_id\" TEXT, \"table\" TEXT, PRIMARY KEY(card_number))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_id_card ON id_card (card_number)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS cluster_setting (\"id\" TEXT,\"node_id\" TEXT,\"node_name\" TEXT,\"cluster_id\" TEXT,\"cluster_name\" TEXT,\"password\" TEXT,\"other_node_ip\" TEXT,\"nodes_json\" TEXT,\"exit\" TEXT, \"table\" TEXT, PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_cluster ON cluster_setting (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS Log (\"id\" TEXT,\"message\" TEXT,\"createTime\" TEXT,\"table\" TEXT, PRIMARY KEY(id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_log ON Log (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS cluster_node ( id text NOT NULL, cluster_id text, node_name TEXT, node_id text, node_ip TEXT, create_time TEXT, PRIMARY KEY (id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_cluster_node ON cluster_node (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS cluster ( cluster_id text NOT NULL, cluster_name TEXT, password TEXT, virtual_ip TEXT, PRIMARY KEY (cluster_id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_cluster ON cluster (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS  dbtablepersons (   id text NOT NULL,   tableId text NOT NULL,   faceFeature TEXT,   personPicUrl TEXT,   personName TEXT,   age text,   sex TEXT,   idCard TEXT,   phoneNum text,   monitorLevel TEXT,   picDesc TEXT,   createTime TEXT,   updateTime TEXT,   createBy TEXT,   isDelete integer,   enable integer,   reserved TEXT,   PRIMARY KEY (id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_dbtablepersons ON dbtablepersons (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS dbTables (  id text NOT NULL,  tableName TEXT,  tableDesc TEXT,  tableType TEXT,  bwType TEXT,  startTime TEXT,  endTime TEXT,  isSync TEXT,  isDelete integer,  enable integer,  analyServerId text,  createTime TEXT,  updateTime TEXT,  createBy TEXT,  PRIMARY KEY (id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_dbTables ON dbTables (id)");
        DatabaseManager.execSQL("CREATE TABLE IF NOT EXISTS person_camera_image_path (  id text NOT NULL,  camera_image_path TEXT,  camera_image_path_exist TEXT, " +
                " camera_image_path_upload TEXT,  from_device_id TEXT,  device_id TEXT,  company_id TEXT,  \"table\" TEXT,  PRIMARY KEY (id))");
        DatabaseManager.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_person_camera_image_path ON person_camera_image_path (id)");
        initTableColumnNames();
    }
 
    public static void createTablesInSyncDatabase() {
        try {
            SQLiteDatabase syncDatabase = SQLiteDatabase.openOrCreateDatabase(
                    Constants.syncDatabasePath, null);
            syncDatabase.execSQL("CREATE TABLE IF NOT EXISTS 'device_info'(\"father_node\" text, \"table\" text ,uuid text PRIMARY KEY, node_id text, device_id text, cluster_id  text, create_time text, update_time text, create_by   text, del_flag    text )");
            syncDatabase.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_device_info ON device_info (uuid)");
            syncDatabase.execSQL("CREATE TABLE IF NOT EXISTS 'cluster_info'(\"table\" text, cluster_id   text PRIMARY KEY,cluster_name text,create_time  text ,update_time  text,create_by    text,del_flag     text )");
            syncDatabase.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS idx_cluster_info ON cluster_info (cluster_id)");
            syncDatabase.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    private static void initTableColumnNames() {
        SQLiteDatabase mDataBase = DatabaseManager.getDatabase();
        Cursor cursor = mDataBase.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
        List<String> tableNameList = new ArrayList<>();
        if (cursor.moveToFirst()) {
            while (!cursor.isAfterLast()) {
                tableNameList.add(cursor.getString(0));
                cursor.moveToNext();
            }
        }
        cursor.close();
        for (String tableName : tableNameList) {
            Cursor dbCursor = mDataBase.query(tableName, null, null, null, null, null, null);
            String[] columnNames = dbCursor.getColumnNames();
            BaseManager.tableColumnNames.put(tableName, Arrays.asList(columnNames));
            dbCursor.close();
        }
    }
}