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
package safeluck.drive.evaluation.DB;
 
import android.content.Context;
import android.util.Log;
 
import androidx.annotation.NonNull;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
import safeluck.drive.evaluation.DB.appstatusdb.AppStatus;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatusDao;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatusInitWork;
import safeluck.drive.evaluation.DB.criterias.CriteriaForI;
import safeluck.drive.evaluation.DB.criterias.CriteriaForII;
import safeluck.drive.evaluation.DB.criterias.CriteriaForIIWorker;
import safeluck.drive.evaluation.DB.criterias.CriteriaForIWorker;
import safeluck.drive.evaluation.DB.criterias.CriteriaIDao;
import safeluck.drive.evaluation.DB.criterias.CriteriaIIDao;
import safeluck.drive.evaluation.DB.exam_status.ExamStatus;
import safeluck.drive.evaluation.DB.exam_status.ExamStatusDao;
import safeluck.drive.evaluation.DB.exam_status.ExamStatusInitWorker;
import safeluck.drive.evaluation.DB.failitems.FailProjDao;
import safeluck.drive.evaluation.DB.failitems.FailedProj;
import safeluck.drive.evaluation.DB.failitems.FailedProjWorker;
import safeluck.drive.evaluation.DB.gps.GPSInfo;
import safeluck.drive.evaluation.DB.gps.GpsInfoDao;
import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
import safeluck.drive.evaluation.DB.rtktb.RTKConfigDao;
import safeluck.drive.evaluation.DB.rtktb.RTKConfigWork;
import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigDao;
import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigInitWorker;
import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig;
 
 
/**
 * MyApplication2
 * Created by lzw on 2019/11/25. 11:13:23
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class},version = 1,exportSchema = false)
public abstract class WorkRoomDataBase extends RoomDatabase {
    private static final String TAG = "WorkRoomDataBase";
    public abstract StudentDao getstudentDao();
 
    //科目二 I类考场评判表
    public abstract CriteriaIDao getCriteriaIDao();
    //科目二 II类考场评判表
    public abstract CriteriaIIDao getCriteriaIIDao();
    public abstract FailProjDao getFailProjDao();
    private static volatile WorkRoomDataBase workRoomDataBase;
 
    private static final int NUMBER_OF_THREADS = 4;
 
    public static final ExecutorService dataBaseWriteExecutor = Executors.newFixedThreadPool(NUMBER_OF_THREADS);
//    static Migration migration = new Migration(1,2) {
//        @Override
//        public void migrate(@NonNull SupportSQLiteDatabase database) {
//            database.execSQL("alter table student_table ADD  COLUMN begin_time INTEGER NOT NULL DEFAULT 0");
//        }
//    };
//private static final Migration[] ALL_MIGRATIONS = new Migration[]{migration};
 
 
     public static WorkRoomDataBase getWorkRoomDataBase(final Context mContext){
         Log.i(TAG, "getWorkRoomDataBase");
        if (workRoomDataBase == null){
            synchronized (WorkRoomDataBase.class){
                if (workRoomDataBase == null){
                    Log.i(TAG, "getWorkRoomDataBase==null ");
                    workRoomDataBase = Room.databaseBuilder(mContext.getApplicationContext(),WorkRoomDataBase.class,"work_database")
//                            .addMigrations(ALL_MIGRATIONS)
                            .addCallback(new Callback() {
                                @Override
                                public void onCreate(@NonNull SupportSQLiteDatabase db) {
                                    super.onCreate(db);
                                    OneTimeWorkRequest oneTimeWorkRequest = OneTimeWorkRequest.from(SeedDatabaseWorker.class);
                                    OneTimeWorkRequest oneTimeWorkRequest1 = OneTimeWorkRequest.from(CriteriaForIWorker.class);
                                    OneTimeWorkRequest oneTimeWorkRequest3 = OneTimeWorkRequest.from(CriteriaForIIWorker.class);
                                    OneTimeWorkRequest oneTimeWorkRequest2 = OneTimeWorkRequest.from(FailedProjWorker.class);
                                    OneTimeWorkRequest RTKConfigWorkRequest = OneTimeWorkRequest.from(RTKConfigWork.class);
                                    OneTimeWorkRequest appStatusInitWork = OneTimeWorkRequest.from(AppStatusInitWork.class);
                                    OneTimeWorkRequest examStatusInitWorker = OneTimeWorkRequest.from(ExamStatusInitWorker.class);
                                    OneTimeWorkRequest signalConigInitWorker = OneTimeWorkRequest.from(SignalConfigInitWorker.class);
                                    Log.i(TAG, "onCreate: 创建数据库后建立数据表插入数据");
                                    WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest);
                                    WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest1);
                                    WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest2);
                                    WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest3);
                                    WorkManager.getInstance(mContext).enqueue(RTKConfigWorkRequest);
                                    WorkManager.getInstance(mContext).enqueue(appStatusInitWork);
                                    WorkManager.getInstance(mContext).enqueue(examStatusInitWorker);
                                    WorkManager.getInstance(mContext).enqueue(signalConigInitWorker);
                                }
 
                                @Override
                                public void onOpen(@NonNull SupportSQLiteDatabase db) {
                                    super.onOpen(db);
                                    Log.i(TAG, "onOpen: ");
                                }
                            })
                            .build();
                }
            }
        }
        return workRoomDataBase;
    }
 
 
    public abstract RTKConfigDao getRTKConfigDao();
 
    public abstract GpsInfoDao getGpsInoDao();
 
    public abstract AppStatusDao getAppStatusDao();
 
    public abstract ExamStatusDao getExamStatusDao();
 
    public abstract SignalConfigDao getSignalConfigDao();
}