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.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 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.Criteria;
|
import safeluck.drive.evaluation.DB.criterias.CriteriaDao;
|
import safeluck.drive.evaluation.DB.criterias.CriteriaInitWorker;
|
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.lightdb.LightAllAnswerDao;
|
import safeluck.drive.evaluation.DB.lightdb.LightAllAnswerInitWorker;
|
import safeluck.drive.evaluation.DB.lightdb.LightAllQuestInitWorker;
|
import safeluck.drive.evaluation.DB.lightdb.LightAllQuestionsDao;
|
import safeluck.drive.evaluation.DB.lightdb.LightAnswers;
|
import safeluck.drive.evaluation.DB.lightdb.LightQuestion;
|
import safeluck.drive.evaluation.DB.lightdb.LightUseInitWorker;
|
import safeluck.drive.evaluation.DB.lightdb.LightUseQuestions;
|
import safeluck.drive.evaluation.DB.lightdb.LightUseQuestionsDao;
|
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, FailedProj.class, LightUseQuestions.class, RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class
|
, Criteria.class,RouteBean.class, RouteCross.class, RouteTriggerLine.class, LightAnswers.class, LightQuestion.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();
|
|
//考场评判表
|
public abstract CriteriaDao getCriteriaDao();
|
//考场评判表
|
public abstract LightUseQuestionsDao getLightUseQuestionsDao();
|
|
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 criteriaInitWorkRequest = OneTimeWorkRequest.from(CriteriaInitWorker.class);
|
OneTimeWorkRequest oneTimeWorkRequest3 = OneTimeWorkRequest.from(LightUseInitWorker.class);
|
OneTimeWorkRequest lightAllQuestInitWorker = OneTimeWorkRequest.from(LightAllQuestInitWorker.class);
|
OneTimeWorkRequest lightAllAnswerInitWorker = OneTimeWorkRequest.from(LightAllAnswerInitWorker.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,criteriaInitWorkRequest,lightAllQuestInitWorker))
|
.then(lightAllAnswerInitWorker).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();
|
|
|
|
|
public abstract LightAllAnswerDao getLightAllAnswersDao();
|
|
public abstract LightAllQuestionsDao getLightAllQuestionsDao();
|
}
|