app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -62,4 +62,5 @@ public static final String WORK_PLATFORM_STATUS_COLUMN = "WORK_PLATFORM_STATUS_COLUMN"; public static final int ENTER_OR_EXIT_ITEM = 0x000D; public static String exam_enter_exitdata="exam_enter_exitdata"; } app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -24,6 +24,9 @@ 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; @@ -40,7 +43,7 @@ * 邮箱: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},version = 1,exportSchema = false) @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class},version = 1,exportSchema = false) public abstract class WorkRoomDataBase extends RoomDatabase { private static final String TAG = "WorkRoomDataBase"; public abstract StudentDao getstudentDao(); @@ -82,6 +85,7 @@ OneTimeWorkRequest oneTimeWorkRequest2 = OneTimeWorkRequest.from(FailedProjWorker.class); OneTimeWorkRequest RTKConfigWorkRequest = OneTimeWorkRequest.from(RTKConfigWork.class); OneTimeWorkRequest appStatusInitWork = OneTimeWorkRequest.from(AppStatusInitWork.class); OneTimeWorkRequest examStatusInitWorker = OneTimeWorkRequest.from(ExamStatusInitWorker.class); Log.i(TAG, "onCreate: 创建数据库后建立数据表插入数据"); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest1); @@ -89,6 +93,7 @@ WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest3); WorkManager.getInstance(mContext).enqueue(RTKConfigWorkRequest); WorkManager.getInstance(mContext).enqueue(appStatusInitWork); WorkManager.getInstance(mContext).enqueue(examStatusInitWorker); } @Override @@ -110,4 +115,6 @@ public abstract GpsInfoDao getGpsInoDao(); public abstract AppStatusDao getAppStatusDao(); public abstract ExamStatusDao getExamStatusDao(); } app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusDao.java
@@ -2,6 +2,7 @@ import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; @@ -22,4 +23,5 @@ //更新业务平台连接状态 @Query("update app_status set work_platform=:connStatus where id=0") void updatework_platformStatus(int connStatus); } app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatus.java
New file @@ -0,0 +1,69 @@ package safeluck.drive.evaluation.DB.exam_status; import androidx.room.Entity; import androidx.room.Ignore; import androidx.room.PrimaryKey; @Entity(tableName = "exam_status") public class ExamStatus { // 1 - 倒库 //2 - 坡起 //3 - 侧方停车 //4 - 曲线行驶 //5 - 直角转弯 @PrimaryKey private int map_id; //0 退出(考试完毕) //1 进入(正在进行考试) 2-待考 private int enter; //表示已经点击了开始考试,并且收到了考试应答 1-已经开始考试 0-未考试 private int startExam; @Ignore public ExamStatus(int map_id, int enter) { this.map_id = map_id; this.enter = enter; } public ExamStatus() { } public int getMap_id() { return map_id; } public void setMap_id(int map_id) { this.map_id = map_id; } public int getEnter() { return enter; } public void setEnter(int enter) { this.enter = enter; } public int getStartExam() { return startExam; } public void setStartExam(int startExam) { this.startExam = startExam; } @Override public String toString() { return "ExamStatus{" + "map_id=" + map_id + ", enter=" + enter + ", startExam=" + startExam + '}'; } } app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java
New file @@ -0,0 +1,23 @@ package safeluck.drive.evaluation.DB.exam_status; import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; import java.util.List; @Dao public interface ExamStatusDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(ExamStatus examStatus); @Query("Select * from exam_status") LiveData<List<ExamStatus>> getExamStatus(); @Query("update exam_status set enter =:enter where map_id =:mapid") void updateEnter(int enter,int mapid); @Query("update exam_status set startExam =:startexam") void updateStartExam(int startexam); } app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusInitWorker.java
New file @@ -0,0 +1,43 @@ package safeluck.drive.evaluation.DB.exam_status; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.work.Worker; import androidx.work.WorkerParameters; import com.anyun.exam.lib.MyLog; import java.util.Random; import safeluck.drive.evaluation.DB.WorkRoomDataBase; public class ExamStatusInitWorker extends Worker { private static final String TAG = ExamStatusInitWorker.class.getSimpleName(); private ExamStatus examStatus; private Random random; public ExamStatusInitWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); examStatus = new ExamStatus(); random = new Random(3); } @NonNull @Override public Result doWork() { MyLog.i(TAG,"exam_status表reset 初始化"); for (int i = 0; i < 5; i++) { int a = random.nextInt(3); Log.i(TAG, "doWork: a="+a); examStatus.setEnter(a);//默认待考项目 examStatus.setStartExam(0);//默认没有开始考试 examStatus.setMap_id(i+1); WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getExamStatusDao().insert(examStatus); } return Result.success(); } } app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java
New file @@ -0,0 +1,35 @@ package safeluck.drive.evaluation.DB.exam_status; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import java.util.List; public class ExamStatusViewModel extends AndroidViewModel { ExamStatusWorkRepo examStatusWorkRepo; LiveData<List<ExamStatus>> examStatus; public ExamStatusViewModel(@NonNull Application application) { super(application); examStatusWorkRepo = new ExamStatusWorkRepo(application); examStatus = examStatusWorkRepo.getExamStatus(); } public void insert(ExamStatus examStatus){ examStatusWorkRepo.insertExamStatus(examStatus); } public LiveData<List<ExamStatus>> getExamStatus(){ return examStatus; } public void updateExamStatus(int enter, int mapid) { examStatusWorkRepo.updateExamStatus(enter,mapid); } public void updateStartExam(int statExam) { examStatusWorkRepo.updateStartExam(statExam); } } app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWoker.java
New file @@ -0,0 +1,43 @@ package safeluck.drive.evaluation.DB.exam_status; import android.content.Context; import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.work.WorkManager; import androidx.work.Worker; import androidx.work.WorkerParameters; import org.json.JSONException; import org.json.JSONObject; import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.DB.WorkRoomDataBase; public class ExamStatusWoker extends Worker { public ExamStatusWoker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); } @NonNull @Override public Result doWork() { String str = getInputData().getString(Constant.exam_enter_exitdata); if (!TextUtils.isEmpty(str)){ JSONObject jsonObject = null; try { jsonObject = new JSONObject(str); int mapId = jsonObject.getInt("map_id"); int enter = jsonObject.getInt("enter"); WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getExamStatusDao().updateEnter(enter,mapId); return Result.success(); } catch (JSONException e) { e.printStackTrace(); return Result.failure(); } } return Result.success(); } } app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java
New file @@ -0,0 +1,49 @@ package safeluck.drive.evaluation.DB.exam_status; import android.app.Application; import androidx.lifecycle.LiveData; import java.util.List; import safeluck.drive.evaluation.DB.WorkRoomDataBase; public class ExamStatusWorkRepo { private ExamStatusDao examStatusDao; private LiveData<List<ExamStatus>> examStatusLiveData; public ExamStatusWorkRepo(Application application) { examStatusDao = WorkRoomDataBase.getWorkRoomDataBase(application).getExamStatusDao(); examStatusLiveData = examStatusDao.getExamStatus(); } public void insertExamStatus(final ExamStatus examStatus){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { examStatusDao.insert(examStatus); } }); } public void updateExamStatus(final int enter, final int mapid){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { examStatusDao.updateEnter(enter,mapid); } }); } public void updateStartExam(final int startex){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { examStatusDao.updateStartExam(startex); } }); } public LiveData<List<ExamStatus>> getExamStatus() { return examStatusLiveData; } } app/src/main/java/safeluck/drive/evaluation/app.java
@@ -34,6 +34,8 @@ import safeluck.drive.evaluation.DB.WorkRoomDataBase; import safeluck.drive.evaluation.DB.appstatusdb.AppStatusWorker; import safeluck.drive.evaluation.DB.exam_status.ExamStatusInitWorker; import safeluck.drive.evaluation.DB.exam_status.ExamStatusWoker; import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.FailedProjRepository; import safeluck.drive.evaluation.DB.gps.GpsInfoWorker; @@ -121,6 +123,9 @@ case Constant.NDK_START: sendVechileInfo(); sendMapInfo(); OneTimeWorkRequest examStatusInitWork = OneTimeWorkRequest.from(ExamStatusInitWorker.class); WorkManager.getInstance(getApplicationContext()).enqueue(examStatusInitWork); //TODO 需要清除app_status数据库表 break; case Constant.RTK_PLATFORM_REGISTER_STATUS: CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json); @@ -197,7 +202,9 @@ WorkManager.getInstance(getApplicationContext()).enqueue(gpsinfoWorkRequest); break; case Constant.ENTER_OR_EXIT_ITEM: Data exam_enter_exitdata = new Data.Builder().putString(Constant.exam_enter_exitdata,json).build(); OneTimeWorkRequest examStatusWorker = new OneTimeWorkRequest.Builder(ExamStatusWoker.class).setInputData(exam_enter_exitdata).build(); WorkManager.getInstance(getApplicationContext()).enqueue(examStatusWorker); break; } app/src/main/java/safeluck/drive/evaluation/bean/ExamStatus.java
File was deleted app/src/main/java/safeluck/drive/evaluation/customview/ArrowView.java
@@ -81,5 +81,6 @@ public void setColor( int mColor){ this.color = mColor; requestLayout(); } } app/src/main/java/safeluck/drive/evaluation/customview/HouseView.java
@@ -80,5 +80,6 @@ public void setColor(int mColor){ this.color = mColor; requestLayout(); } } app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -2,6 +2,8 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -17,27 +19,22 @@ import androidx.lifecycle.ViewModelProviders; import com.anyun.exam.lib.AYSdk; import com.anyun.exam.lib.MyLog; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.DB.exam_status.ExamStatusViewModel; import safeluck.drive.evaluation.DB.failitems.FailedProjViewModel; import safeluck.drive.evaluation.DB.failitems.FailedProj_select; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.adapter.ScoreAdapter; import safeluck.drive.evaluation.bean.ExamStatus; import safeluck.drive.evaluation.DB.exam_status.ExamStatus; import safeluck.drive.evaluation.bean.ScoreBean; import safeluck.drive.evaluation.cEventCenter.CEventCenter; import safeluck.drive.evaluation.customview.ArrowView; import safeluck.drive.evaluation.customview.HouseView; @@ -60,12 +57,28 @@ private List<String> item_conents = new ArrayList<>();//坡道定点停车和起步 private int item_id;//扣分分数总和 private ExamStatusViewModel examStatusViewModel; private static final int ADD_DATA = 1; private List<ScoreBean> mArrayList = new ArrayList<>(); public static SupportFragment newInstance() { return new NetWorkTrainFragment(); } private Handler mHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what == ADD_DATA){ av_curve.setColor(whatPaintColor(examStatusList.get(3))); av_zhijiao.setColor(whatPaintColor(examStatusList.get(4))); av_podao.setColor(whatPaintColor(examStatusList.get(1))); av_park.setColor(whatPaintColor(examStatusList.get(2))); houseView.setColor(whatPaintColor(examStatusList.get(0))); } return false; } }); @Nullable @Override @@ -93,12 +106,30 @@ }); examStatusViewModel = ViewModelProviders.of(this).get(ExamStatusViewModel.class); examStatusViewModel.getExamStatus().observe(this, new Observer<List<ExamStatus>>() { @Override public void onChanged(List<ExamStatus> examStatus) { for (ExamStatus e : examStatus) { Log.i(TAG, "onChanged: e="+e.toString()); } Log.i(TAG, "onChanged: "); examStatusList.clear(); examStatusList.addAll(examStatus); mHandler.obtainMessage(ADD_DATA).sendToTarget(); } }); return view; } private int whatPaintColor(ExamStatus examStatus) { int map_id = examStatus.getMap_id(); int status = examStatus.getEnter(); private int whatPaintColor(ExamStatus examStat) { int map_id = examStat.getMap_id(); int status = examStat.getEnter(); Log.i(TAG, "whatPaintColor: map_id="+map_id+" status="+status); switch (status) { case 0://考试完成 switch (map_id) { @@ -150,18 +181,19 @@ av_zhijiao = view.findViewById(R.id.av1); houseView = view.findViewById(R.id.hv); //粉红色正在进行该项目的考试 examStatusList.add(new ExamStatus(1, 0)); examStatusList.add(new ExamStatus(2, 1)); examStatusList.add(new ExamStatus(3, 0)); examStatusList.add(new ExamStatus(4, 2)); examStatusList.add(new ExamStatus(5, 1)); // examStatusList.add(new ExamStatus(1, 0)); // examStatusList.add(new ExamStatus(2, 1)); // examStatusList.add(new ExamStatus(3, 0)); // examStatusList.add(new ExamStatus(4, 2)); // examStatusList.add(new ExamStatus(5, 1)); av_curve.setColor(whatPaintColor(examStatusList.get(3))); av_zhijiao.setColor(whatPaintColor(examStatusList.get(4))); av_podao.setColor(whatPaintColor(examStatusList.get(1))); av_park.setColor(whatPaintColor(examStatusList.get(2))); houseView.setColor(whatPaintColor(examStatusList.get(0))); // mHandler.obtainMessage(ADD_DATA).sendToTarget(); // av_curve.setColor(whatPaintColor(examStatusList.get(3))); // av_zhijiao.setColor(whatPaintColor(examStatusList.get(4))); // av_podao.setColor(whatPaintColor(examStatusList.get(1))); // av_park.setColor(whatPaintColor(examStatusList.get(2))); // houseView.setColor(whatPaintColor(examStatusList.get(0))); mListView = view.findViewById(R.id.lv); mListView.setFocusable(false); app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -29,8 +29,12 @@ import safeluck.drive.evaluation.DB.Student; import safeluck.drive.evaluation.DB.WokViewModel; import safeluck.drive.evaluation.DB.WorkRoomDataBase; import safeluck.drive.evaluation.DB.appstatusdb.AppStatusInitWork; import safeluck.drive.evaluation.DB.criterias.CriteriaForI; import safeluck.drive.evaluation.DB.criterias.viewmodel.CriteriaIViewModel; import safeluck.drive.evaluation.DB.exam_status.ExamStatus; import safeluck.drive.evaluation.DB.exam_status.ExamStatusInitWorker; import safeluck.drive.evaluation.DB.exam_status.ExamStatusViewModel; import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.FailedProj_select; import safeluck.drive.evaluation.DB.gps.GpsInfoWorker; @@ -68,6 +72,7 @@ View view = inflater.inflate(R.layout.layout_tcpclient, container, false); initView(view); // workViewModel =ViewModelProviders.of(this).get(CriteriaIViewModel.class); return view; @@ -133,7 +138,9 @@ // MessageProcessor.getInstance().sendMessage(sendEditText.getText().toString().trim()); // sendEditText.getText().clear(); //清除app_status 表 // OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(AppStatusInitWork.class).build(); // WorkManager.getInstance(_mActivity).enqueue(oneTimeWorkRequest); break; app/src/main/res/layout/layout_net_train_item.xml
@@ -20,13 +20,13 @@ android:layout_height="80dp" android:layout_toRightOf="@+id/hv" android:id="@+id/av1" app:text="直角转弯" app:text="坡道定点" android:layout_marginLeft="-15dp" /> <safeluck.drive.evaluation.customview.ArrowView android:layout_width="80dp" android:layout_height="80dp" app:text="曲线行驶" app:text="侧方停车" android:layout_marginLeft="-15dp" android:layout_toRightOf="@+id/av1" android:id="@+id/av2" @@ -35,7 +35,7 @@ android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/av3" app:text="侧方停车" app:text="曲线行驶" android:layout_marginLeft="-15dp" android:layout_toRightOf="@id/av2" /> @@ -45,7 +45,7 @@ android:layout_marginLeft="-15dp" android:layout_toRightOf="@+id/av3" android:id="@+id/av4" app:text="坡道定点" app:text="直角转弯" /> </RelativeLayout>