app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -21,12 +21,6 @@ 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.CriteriaForI; import safeluck.drive.evaluation.DB.criterias.CriteriaForIII; import safeluck.drive.evaluation.DB.criterias.CriteriaForIIIWorker; import safeluck.drive.evaluation.DB.criterias.CriteriaForIWorker; import safeluck.drive.evaluation.DB.criterias.CriteriaIDao; import safeluck.drive.evaluation.DB.criterias.CriteriaIIIDao; import safeluck.drive.evaluation.DB.criterias.CriteriaInitWorker; import safeluck.drive.evaluation.DB.exam_status.ExamStatus; import safeluck.drive.evaluation.DB.exam_status.ExamStatusDao; @@ -34,8 +28,6 @@ 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.lightdb.LightAllAnswerDao; @@ -68,7 +60,7 @@ * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class,LuKaoFailedProj.class, LightUseQuestions.class, CriteriaForIII.class,RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class @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"; @@ -77,8 +69,6 @@ public abstract RouteCrossDao getRouteCrooDao(); public abstract RouteTriggerLineDao getRouteTriggerLineDao(); //科目二 I类考场评判表 public abstract CriteriaIDao getCriteriaIDao(); //考场评判表 public abstract CriteriaDao getCriteriaDao(); //考场评判表 @@ -112,12 +102,10 @@ public void onCreate(@NonNull SupportSQLiteDatabase db) { super.onCreate(db); OneTimeWorkRequest oneTimeWorkRequest = OneTimeWorkRequest.from(SeedDatabaseWorker.class); OneTimeWorkRequest oneTimeWorkRequest1 = OneTimeWorkRequest.from(CriteriaForIWorker.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 mCriteriaForIIIWorker= OneTimeWorkRequest.from(CriteriaForIIIWorker.class); OneTimeWorkRequest oneTimeWorkRequest2 = OneTimeWorkRequest.from(FailedProjWorker.class); OneTimeWorkRequest RTKConfigWorkRequest = OneTimeWorkRequest.from(RTKConfigWork.class); OneTimeWorkRequest appStatusInitWork = OneTimeWorkRequest.from(AppStatusInitWork.class); @@ -136,8 +124,8 @@ // WorkManager.getInstance(mContext).enqueue(signalConigInitWorker); //单路径执行,可以实现更加复杂的多路径执行方式 WorkContinuation chain1= WorkManager.getInstance(mContext).beginWith(Arrays.asList(oneTimeWorkRequest,oneTimeWorkRequest1,criteriaInitWorkRequest)) .then(mCriteriaForIIIWorker).then(oneTimeWorkRequest3).then(lightAllAnswerInitWorker).then(lightAllQuestInitWorker); 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); @@ -169,14 +157,8 @@ public abstract SignalConfigDao getSignalConfigDao(); /** * 获取科目三评判表的 Dao * * @return */ public abstract CriteriaIIIDao getCriteriaIIIDao(); public abstract LuKaoFailProjDao getLuKaoFailProjDao(); public abstract LightAllAnswerDao getLightAllAnswersDao(); app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForI.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIII.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIIIWorker.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIWorker.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIDao.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIIIDao.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriasRepository.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/criterias/viewmodel/CriteriaIViewModel.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailProjDao.java
@@ -21,27 +21,13 @@ @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(FailedProj proj); /** * 查询 科目二 I类考场的失败项目 (多表查询) * 如果要添加 科目二II III类考场失败项目,需要建立相应的评判标准表数据表 * @return */ @Query("SELECT emp_id,stu_id, utc ,sn ,deducting_reason,score_deducting,item_content from criteria_one INNER JOIN fail_projects ON criteria_one.item_id= fail_projects.emp_id where fail_projects.stu_id=:stu_id and fail_projects.subject=1") LiveData<List<FailedProj_select>> getFailedProjectsForI(long stu_id); /** * 查询 suoyou 失败项目 (多表查询) * @return */ @Query("SELECT emp_id,stu_id, utc ,sn ,deducting_reason,score_deducting,item_content from criteria INNER JOIN fail_projects ON criteria.item_id= fail_projects.emp_id where fail_projects.stu_id=:stu_id and fail_projects.subject=999") LiveData<List<FailedProj_select>> getFailedProjects(long stu_id); /** * 查询 科目三 路考考场的失败项目 (多表查询) * 如果要添加 科目二II III类考场失败项目,需要建立相应的评判标准表数据表 * @return */ @Query("SELECT emp_id,stu_id,utc,sn,deducting_reason,score_deducting,item_content from criteria_three INNER JOIN fail_projects ON criteria_three.item_id= fail_projects.emp_id where fail_projects.stu_id=:stu_id and fail_projects.subject=3") LiveData<List<FailedProj_select>> getFailedProjectsForIII(long stu_id); /** * 获取失败项目条数 @@ -54,10 +40,5 @@ @Query("delete from fail_projects") void deleteAll(); /** * 查询 科目二 I类考场的所有失败项目 (多表查询) * @return */ @Query("SELECT emp_id,stu_id, utc ,sn ,deducting_reason,score_deducting,item_content from criteria_one INNER JOIN fail_projects ON criteria_one.item_id= fail_projects.emp_id where fail_projects.stu_id=:stu_id and fail_projects.subject=1") List<FailedProj_select> getAllFailProjI(long stu_id); } app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProj.java
@@ -7,7 +7,6 @@ import androidx.room.PrimaryKey; import safeluck.drive.evaluation.DB.criterias.Criteria; import safeluck.drive.evaluation.DB.criterias.CriteriaForI; import static androidx.room.ForeignKey.CASCADE; app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjRepository.java
@@ -20,12 +20,10 @@ private FailProjDao failProjDao; private LuKaoFailProjDao luKaofailProjDao; public FailedProjRepository(Application application) { WorkRoomDataBase dataBase = WorkRoomDataBase.getWorkRoomDataBase(application); failProjDao = dataBase.getFailProjDao(); luKaofailProjDao = dataBase.getLuKaoFailProjDao(); } @@ -38,15 +36,7 @@ } }); } public void insertLuKao(final LuKaoFailedProj proj) { WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { luKaofailProjDao.insert(proj); } }); } /** * 删除fail_projects表中所有数据 @@ -56,20 +46,11 @@ @Override public void run() { failProjDao.deleteAll(); luKaofailProjDao.deleteAll(); } }); } /** * 获得科目二 I类考场失败项目扣分项 * * @param stu_id * @return */ public LiveData<List<FailedProj_select>> getFailedProjectsForI(long stu_id) { return failProjDao.getFailedProjectsForI(stu_id); } /** * 获得suoyou 失败项目扣分项 @@ -81,15 +62,7 @@ return failProjDao.getFailedProjects(stu_id); } /** * 获得科目三 路考考场失败项目扣分项 * * @param stu_id * @return */ public LiveData<List<FailedProj_select>> getFailedProjectsForIII(long stu_id) { return luKaofailProjDao.getFailedProjectsForIII(stu_id); } } app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjViewModel.java
@@ -26,13 +26,7 @@ public LiveData<List<FailedProj_select>> getFailedProjects(long stu_id){ return failedProjRepository.getFailedProjects(stu_id); } public LiveData<List<FailedProj_select>> getFailedProjectsForI(long stu_id){ return failedProjRepository.getFailedProjectsForI(stu_id); } public LiveData<List<FailedProj_select>> getFailedProjectsForIII(long stu_id){ return failedProjRepository.getFailedProjectsForIII(stu_id); } public void insert(FailedProj proj){ failedProjRepository.insert(proj); } app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailProjDao.java
File was deleted app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailedProj.java
File was deleted app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -286,15 +286,10 @@ synchronized (MainActivity.this){ if (ExamPlatformData.getInstance().isCanWriteSD()){ AbsInitialData.getInstance().resethasSendInitData(); // AbsInitialData.getInstance().resethasSendInitData(); AbsInitialData.getInstance().sendInitialData(); MyLog.i("rtkConfig 更新sn后发送初始数据"); } // if (onlySendOnceRTKConfig){ // MyLog.i(TAG,"进入 synchronized (MainActivity.this)"); // onlySendOnceRTKConfig = false; // sendRtkConfigInfo(); // } } } app/src/main/java/safeluck/drive/evaluation/app.java
@@ -2,14 +2,12 @@ import android.app.Application; import android.content.Context; import android.os.Environment; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.work.Configuration; import androidx.work.Data; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; @@ -32,7 +30,6 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -40,12 +37,9 @@ import safeluck.drive.evaluation.DB.WorkRoomDataBase; import safeluck.drive.evaluation.DB.appstatusdb.AppStatusWorker; import safeluck.drive.evaluation.DB.criterias.Criteria; import safeluck.drive.evaluation.DB.criterias.CriteriaForI; import safeluck.drive.evaluation.DB.criterias.CriteriaForIII; import safeluck.drive.evaluation.DB.exam_status.ExamStatus; import safeluck.drive.evaluation.DB.exam_status.ExamStatusOutWorker; import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.LuKaoFailedProj; import safeluck.drive.evaluation.DB.gps.GpsInfoWorker; import safeluck.drive.evaluation.DB.route.RouteCross; import safeluck.drive.evaluation.DB.route.RouteTriggerLine; @@ -717,10 +711,12 @@ MyLog.i(String.format("bindStatus = %d",code)); if (code == 0){ ExamPlatformData.getInstance().getTTS().speak("服务绑定成功"); ExamPlatformData.getInstance().setServiceBindStatus(0); initData(); }else{ ExamPlatformData.getInstance().getTTS().speak("服务异常死亡"); MyLog.i("服务异常死亡监听到之后,重置发送标志,然后发送数据"); ExamPlatformData.getInstance().setServiceBindStatus(-1); AbsInitialData.getInstance().resethasSendInitData(); AbsInitialData.getInstance().sendInitialData(); } app/src/main/java/safeluck/drive/evaluation/bean/AbsInitialData.java
@@ -98,34 +98,40 @@ } ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); public synchronized void sendInitialData(){ if (checkPermission() && !hasSend){ /**********只有权限满足(读写SD卡权限)和没有发送过的情况下才进行以下操作*********/ hasSend = true; sendCarModelFile(); sendRoadMapFile(); sendItemsMapFile(); sendJudgeArgs(); if ( ExamPlatformData.getInstance().getServceBindStatus()==0){ if (checkPermission() && !hasSend ){ /**********只有权限满足(读写SD卡权限)和没有发送过的情况下才进行以下操作*********/ hasSend = true; sendCarModelFile(); sendRoadMapFile(); sendItemsMapFile(); sendJudgeArgs(); //需要延迟发送,因为前面有http请求 executorService.schedule(()->{ Log.i("AYJiaKao","延迟发送"); // if (DataInitKt.getSendVehiSucc() && (DataInitKt.getSendMapSucc() || DataInitKt.getSendRoadMapSucc())){ CThreadPoolExecutor.runInBackground(()->{ sendLightsAndExamStatus(); }); executorService.schedule(()->{ Log.i("AYJiaKao","延迟发送"); if (DataInitKt.getSendVehiSucc() && (DataInitKt.getSendMapSucc() || DataInitKt.getSendRoadMapSucc())){ CThreadPoolExecutor.runInBackground(()->{ sendLightsAndExamStatus(); }); // }else{ MyLog.i(DataInitKt.getSendRoadMapSucc()?String.format("道路地图发送成功"):"道路地图发送失败"); MyLog.i(DataInitKt.getSendMapSucc()?String.format("场地地图发送成功"):"场地地图发送失败"); MyLog.i(DataInitKt.getSendVehiSucc()?String.format("车辆模型发送成功"):"车辆模型发送失败"); Toast.makeText(app.getAppContext(), "地图或车模型不存在,请检查平台配置或手工配置", Toast.LENGTH_SHORT).show(); // } }else{ MyLog.i(DataInitKt.getSendRoadMapSucc()?String.format("道路地图发送成功"):"道路地图发送失败"); MyLog.i(DataInitKt.getSendMapSucc()?String.format("场地地图发送成功"):"场地地图发送失败"); MyLog.i(DataInitKt.getSendVehiSucc()?String.format("车辆模型发送成功"):"车辆模型发送失败"); Toast.makeText(app.getAppContext(), "地图或车模型不存在,请检查平台配置或手工配置", Toast.LENGTH_SHORT).show(); } },2, TimeUnit.SECONDS); }else{ MyLog.i(hasSend?"已经发送过了初始数据":"权限不允许,不能发送初始数据"); } }else{ MyLog.i(hasSend?"已经发送过了初始数据":"权限不允许,不能发送初始数据"); MyLog.i("服务未绑定成功,不能发送初始数据"); } } app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java
@@ -619,4 +619,13 @@ public String getMcuSN(){ return mcuSN; } private int bindServiceStats= -2;// 0-服务绑定成功 -1,服务异常死亡 -2-默认值还未进行绑定服务操作; public void setServiceBindStatus(int i) { this.bindServiceStats = i; } public int getServceBindStatus(){ return bindServiceStats; } } app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -344,100 +344,48 @@ failedProjViewModel = ViewModelProviders.of(this).get(FailedProjViewModel.class); failedProjViewModel.getFailedProjectsForIII(Constant.TEST_STU_ID).observe(this, new Observer<List<FailedProj_select>>() { @Override public void onChanged(List<FailedProj_select> failedProj_selects) { if (ExamPlatformData.getInstance().getExamType()>ExamPlatformData.EXAM_TYPE_ChangKAO){ MyLog.i("现在是路考状态,监视路考数据失败项目"); if (failedProj_selects != null && failedProj_selects.size()>0){ item_id = 0; currTotalScore = 100; mArrayList.clear(); item_conents.clear(); for (FailedProj_select f : failedProj_selects) { item_id += f.getScore_deducting(); Log.i(TAG, "onChanged: " + f.toString()); mArrayList.add(new ScoreBean(f.getScore_deducting(), f.getItem_content(), f.getDeducting_reason(),f.getUtc())); item_conents.add(f.getItem_content()); Collections.sort(mArrayList); mScoreAdapter.addDatas(mArrayList); MyLog.i("item_score="+item_id); } MyLog.i("没扣分之前得分:"+currTotalScore); currTotalScore -=item_id; MyLog.i("路考当前得分:"+currTotalScore); if (currTotalScore < Constant.PASSING_SCORE){ MyLog.i("路考低于80,不合格"+currTotalScore); ExamPlatformData.getInstance().getTTS().speak("考试不合格"); stopExam(); } MyLog.i("路考监测到有失败项目加入,通知UI更新颜色"); mHandler.obtainMessage(ADD_DATA).sendToTarget(); }else{ MyLog.i(TAG,"路考失败项目数据表被清空更新UI"); item_id = 0; // mArrayList.clear(); // item_conents.clear(); // Collections.sort(mArrayList); // mScoreAdapter.addDatas(mArrayList); // mHandler.obtainMessage(ADD_DATA).sendToTarget(); } } } }); failedProjViewModel.getFailedProjectsForI(Constant.TEST_STU_ID).observe(this, new Observer<List<FailedProj_select>>() { failedProjViewModel.getFailedProjects(Constant.TEST_STU_ID).observe(this, new Observer<List<FailedProj_select>>() { @Override public void onChanged(List<FailedProj_select> failedProj_selects) { if (ExamPlatformData.getInstance().getExamType()<=ExamPlatformData.EXAM_TYPE_ChangKAO){ MyLog.i("现在是场考状态,监视数据失败项目"); if (failedProj_selects != null && failedProj_selects.size()>0){ item_id = 0; currTotalScore = 100; mArrayList.clear(); item_conents.clear(); for (FailedProj_select f : failedProj_selects) { item_id += f.getScore_deducting(); Log.i(TAG, "onChanged: " + f.toString()); mArrayList.add(new ScoreBean(f.getScore_deducting(), f.getItem_content(), f.getDeducting_reason(),f.getUtc())); item_conents.add(f.getItem_content()); Collections.sort(mArrayList); mScoreAdapter.addDatas(mArrayList); MyLog.i("item_score="+item_id); } MyLog.i("没扣分之前得分:"+currTotalScore); currTotalScore -=item_id; MyLog.i("当前得分:"+currTotalScore); if (currTotalScore < Constant.PASSING_SCORE){ MyLog.i("场考低于80,不合格"+currTotalScore); ExamPlatformData.getInstance().getTTS().speak("考试不合格"); stopExam(); } MyLog.i("场考监测到有失败项目加入,通知UI更新颜色"); mHandler.obtainMessage(ADD_DATA).sendToTarget(); }else{ MyLog.i(TAG,"场考失败项目数据表被清空更新UI"); item_id = 0; // mArrayList.clear(); // item_conents.clear(); // Collections.sort(mArrayList); // mScoreAdapter.addDatas(mArrayList); // mHandler.obtainMessage(ADD_DATA).sendToTarget(); if (failedProj_selects != null && failedProj_selects.size()>0){ item_id = 0; currTotalScore = 100; mArrayList.clear(); item_conents.clear(); for (FailedProj_select f : failedProj_selects) { item_id += f.getScore_deducting(); Log.i(TAG, "onChanged: " + f.toString()); mArrayList.add(new ScoreBean(f.getScore_deducting(), f.getItem_content(), f.getDeducting_reason(),f.getUtc())); item_conents.add(f.getItem_content()); Collections.sort(mArrayList); mScoreAdapter.addDatas(mArrayList); MyLog.i("item_score="+item_id); } } MyLog.i("没扣分之前得分:"+currTotalScore); currTotalScore -=item_id; MyLog.i("当前得分:"+currTotalScore); if (currTotalScore < Constant.PASSING_SCORE){ MyLog.i("低于80,不合格,结束考试"+currTotalScore); ExamPlatformData.getInstance().getTTS().speak("考试不合格"); stopExam(); } MyLog.i("监测到有失败项目加入,通知UI更新颜色"); mHandler.obtainMessage(ADD_DATA).sendToTarget(); }else{ MyLog.i(TAG,"失败项目数据表被清空更新UI"); item_id = 0; } } }); examStatusViewModel = ViewModelProviders.of(this).get(ExamStatusViewModel.class); examStatusViewModel.getExamStatus().observe(this, new Observer<List<ExamStatus>>() { @Override app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -16,10 +16,7 @@ import android.widget.Toast; import androidx.appcompat.widget.AppCompatEditText; import androidx.lifecycle.Observer; import com.anyun.exam.lib.util.Speaker; import com.anyun.im_lib.listener.IMSConnectStatusCallback; import com.anyun.im_lib.util.ByteUtil; import com.google.android.material.textfield.TextInputEditText; import com.safeluck.aykj.utils.BytesUtils; @@ -36,9 +33,6 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import safeluck.drive.evaluation.DB.criterias.CriteriaForI; import safeluck.drive.evaluation.DB.criterias.viewmodel.CriteriaIViewModel; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.bean.ExamPlatformData; import safeluck.drive.evaluation.httpmodule.AYApiService; @@ -78,7 +72,6 @@ private Button btn_auth; private Button btn_send; private AppCompatEditText sendEditText; private CriteriaIViewModel workViewModel; private int item_id=0; public static TcpFragment newInstance() { @@ -327,12 +320,4 @@ } } private void checkCriteria(int item_id) { workViewModel.queryCriteriaI(item_id).observe(TcpFragment.this, new Observer<CriteriaForI>() { @Override public void onChanged(CriteriaForI criteriaForI) { Log.i(TAG, "onChanged: "+criteriaForI.toString()); } }); } }