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(); }