yy1717
2021-02-02 c3e207bd4a37f4f4cafbf43b897592ac3c582e45
Merge remote-tracking branch 'origin/master'
10个文件已删除
11个文件已修改
905 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForI.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIII.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIIIWorker.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIWorker.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIDao.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIIIDao.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriasRepository.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/viewmodel/CriteriaIViewModel.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailProjDao.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProj.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjRepository.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjViewModel.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailProjDao.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailedProj.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/AbsInitialData.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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());
            }
        });
    }
}