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.WorkContinuation;
|
import androidx.work.WorkManager;
|
|
import java.util.Arrays;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
|
import okhttp3.Route;
|
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.CriteriaForIII;
|
import safeluck.drive.evaluation.DB.criterias.CriteriaForIIIWorker;
|
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.criterias.CriteriaIIIDao;
|
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.failitems.LuKaoFailProjDao;
|
import safeluck.drive.evaluation.DB.failitems.LuKaoFailedProj;
|
import safeluck.drive.evaluation.DB.gps.GPSInfo;
|
import safeluck.drive.evaluation.DB.gps.GpsInfoDao;
|
import safeluck.drive.evaluation.DB.route.RouteBean;
|
import safeluck.drive.evaluation.DB.route.RouteBeanDao;
|
import safeluck.drive.evaluation.DB.route.RouteCross;
|
import safeluck.drive.evaluation.DB.route.RouteCrossDao;
|
import safeluck.drive.evaluation.DB.route.RouteInitWorker;
|
import safeluck.drive.evaluation.DB.route.RouteTriggerLine;
|
import safeluck.drive.evaluation.DB.route.RouteTriggerLineDao;
|
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,LuKaoFailedProj.class, CriteriaForII.class, CriteriaForIII.class,RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class
|
,RouteBean.class, RouteCross.class, RouteTriggerLine.class},version = 1,exportSchema = false)
|
public abstract class WorkRoomDataBase extends RoomDatabase {
|
private static final String TAG = "WorkRoomDataBase";
|
public abstract StudentDao getstudentDao();
|
public abstract RouteBeanDao getRouteBeanDao();
|
public abstract RouteCrossDao getRouteCrooDao();
|
public abstract RouteTriggerLineDao getRouteTriggerLineDao();
|
|
//科目二 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 mCriteriaForIIIWorker= OneTimeWorkRequest.from(CriteriaForIIIWorker.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);
|
OneTimeWorkRequest routeInitWorker = OneTimeWorkRequest.from(RouteInitWorker.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(mCriteriaForIIIWorker);
|
// WorkManager.getInstance(mContext).enqueue(RTKConfigWorkRequest);
|
// WorkManager.getInstance(mContext).enqueue(appStatusInitWork);
|
// WorkManager.getInstance(mContext).enqueue(examStatusInitWorker);
|
// WorkManager.getInstance(mContext).enqueue(signalConigInitWorker);
|
|
//单路径执行,可以实现更加复杂的多路径执行方式
|
WorkContinuation chain1= WorkManager.getInstance(mContext).beginWith(Arrays.asList(oneTimeWorkRequest,oneTimeWorkRequest1))
|
.then(mCriteriaForIIIWorker).then(oneTimeWorkRequest3);
|
WorkContinuation chain2 = WorkManager.getInstance(mContext).beginWith(Arrays.asList(RTKConfigWorkRequest,appStatusInitWork,signalConigInitWorker,routeInitWorker))
|
.then(oneTimeWorkRequest2).then(examStatusInitWorker);
|
|
WorkContinuation chain3 = WorkContinuation.combine(Arrays.asList(chain1,chain2));
|
chain3.enqueue();
|
}
|
|
@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();
|
|
/**
|
* 获取科目三评判表的 Dao
|
*
|
* @return
|
*/
|
public abstract CriteriaIIIDao getCriteriaIIIDao();
|
|
public abstract LuKaoFailProjDao getLuKaoFailProjDao();
|
}
|