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.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; //import com.basic.security.manager.erlang.ErlangProcess; 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()); IdentityManager.save(adminIdentity); } ModelAdapter staffIdentity = BaseManager.findById("identity", "staffIdentity"); if (staffIdentity == null) { staffIdentity = new ModelAdapter("staffIdentity"); staffIdentity.setString("table", "identity"); staffIdentity.setString("name", "老师"); staffIdentity.setString("device_id", DeviceManager.getDeviceId()); staffIdentity.setString("company_id", CompanyManager.getCompanyId()); IdentityManager.save(staffIdentity); } ModelAdapter blackListIdentity = BaseManager.findById("identity", "blackListIdentity"); if (blackListIdentity == null) { blackListIdentity = new ModelAdapter("blackListIdentity"); blackListIdentity.setString("table", "identity"); blackListIdentity.setString("name", "内部人员"); blackListIdentity.setString("device_id", DeviceManager.getDeviceId()); blackListIdentity.setString("company_id", CompanyManager.getCompanyId()); IdentityManager.save(blackListIdentity); } 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()); IdentityManager.save(studentIdentity); } ModelAdapter autoSignUpIdentity = BaseManager.findById("identity", "autoSignUpIdentity"); if (autoSignUpIdentity == null) { autoSignUpIdentity = new ModelAdapter("autoSignUpIdentity"); autoSignUpIdentity.setString("table", "identity"); autoSignUpIdentity.setString("name", "访客"); autoSignUpIdentity.setString("device_id", DeviceManager.getDeviceId()); autoSignUpIdentity.setString("company_id", CompanyManager.getCompanyId()); IdentityManager.save(autoSignUpIdentity); } ModelAdapter admin_person = BaseManager.findById("person", deviceId + "admin_person"); if (admin_person == null) { admin_person = new ModelAdapter(deviceId + "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"); PersonManager.savePerson(admin_person); } ModelAdapter admin_user_table = BaseManager.findById("user", deviceId + "admin_user"); if (admin_user_table == null) { admin_user_table = new ModelAdapter(deviceId + "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()); UserManager.saveUser(admin_user_table); } ModelAdapter admin_person_identity = BaseManager.findById("person_identity", deviceId + "admin_person_identity"); if (admin_person_identity == null) { admin_person_identity = new ModelAdapter(deviceId + "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()); PersonIdentityManager.savePersonIdentity(admin_person_identity); } BaseSettingManager.initBaseSetting(); DeviceManager.initDevice(); HintDoorAccessManager.initHintDoorAccess(); HintRecognizeManager.initHintRecognize(); HintSignUpManager.initHintSignUp(); ClusterSettingManager.initCluster(); if (Constants.isUseSerf) { ClusterSettingManager.start(); } // ErlangProcess.erlangProcessCanStart = true; while (!MainActivity.mainActivityInitComplete) { SystemClock.sleep(200); } MainActivity mainActivity = BaseApplication.getApplication().activity; if (Constants.indoorOutdoorInOne) { try { ModelAdapter adminAccount = AccountManager.getAccount(); AccountManager.setAdminAccount(adminAccount); AccountManager.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); } 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 { 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 (\"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,\"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)"); 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 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(); } } }