yy1717
2020-03-21 8a237469ec680603b1c662dc7e67bd3ff0bbfd2a
Merge branch 'master' of https://gitee.com/endian11/DriveJudge
12个文件已修改
3个文件已添加
611 ■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/Constant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIII.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIDao.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIIIDao.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt 90 ●●●● 补丁 | 查看 | 原始文档 | 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 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProj_select.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailProjDao.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailedProj.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/worker/TTSWorker.kt 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -97,4 +97,6 @@
    public static final String TIME_MINUTE = "show_time_minute";
    @NotNull
    public static final String MCU_UPGRADE_FAIL_RESASON = "mcu_upgrade_fail_reason";
    @NotNull
    public static final String TTS="tts_judge";
}
app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -35,6 +35,8 @@
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.rtktb.RTKConfig;
@@ -51,7 +53,7 @@
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, CriteriaForIII.class,RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class},version = 1,exportSchema = false)
@Database(entities = {Student.class, CriteriaForI.class, FailedProj.class,LuKaoFailedProj.class, CriteriaForII.class, CriteriaForIII.class,RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class},version = 1,exportSchema = false)
public abstract class WorkRoomDataBase extends RoomDatabase {
    private static final String TAG = "WorkRoomDataBase";
    public abstract StudentDao getstudentDao();
@@ -147,4 +149,6 @@
     * @return
     */
    public abstract CriteriaIIIDao getCriteriaIIIDao();
    public abstract LuKaoFailProjDao getLuKaoFailProjDao();
}
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaForIII.java
@@ -19,6 +19,9 @@
 *    item_id   item_content                    deducting_reason                     score_deducting                    required _precision
        23                  起步                             车门未完全关闭起步                    不合格                        行驶距离大于1m 时
 **************/
    @PrimaryKey
    @ColumnInfo(name = "item_id")
    @NonNull
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIDao.java
@@ -26,4 +26,6 @@
    @Query( "SELECT * FROM criteria_one WHERE item_id =:item_id")
    LiveData<CriteriaForI > queryItemForCriteriaI(int item_id);
    @Query( "SELECT * FROM criteria_one WHERE item_id =:item_id")
    CriteriaForI queryItemForCriteriaINoLive(int item_id);
}
app/src/main/java/safeluck/drive/evaluation/DB/criterias/CriteriaIIIDao.java
@@ -25,4 +25,6 @@
    @Query( "SELECT * FROM criteria_three WHERE item_id =:item_id")
    LiveData<CriteriaForIII > queryItemForCriteriaIII(int item_id);
    @Query( "SELECT * FROM criteria_three WHERE item_id =:item_id")
    CriteriaForIII  queryItemForCriteriaIIINoLive(int item_id);
}
app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
@@ -1,7 +1,10 @@
package safeluck.drive.evaluation.DB.exam_status
import android.content.Context
import android.os.Environment
import android.text.TextUtils
import android.util.Log
import android.widget.Toast
import androidx.work.Data
import androidx.work.Worker
import androidx.work.WorkerParameters
@@ -16,10 +19,13 @@
import safeluck.drive.evaluation.DB.WorkRoomDataBase
import safeluck.drive.evaluation.DB.rtktb.RTKConfig
import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig
import safeluck.drive.evaluation.app
import safeluck.drive.evaluation.bean.ExamPlatformData
import safeluck.drive.evaluation.bean.SignalConfigRemote
import safeluck.drive.evaluation.bean.SimulateNightBean
import safeluck.drive.evaluation.bean.SimulateNightBean.QuestionBean
import safeluck.drive.evaluation.util.CThreadPoolExecutor
import safeluck.drive.evaluation.util.FileUtil
import safeluck.drive.evaluation.util.Utils
import java.io.IOException
import java.io.InputStreamReader
@@ -47,22 +53,12 @@
        tempQs.add(list[list.size-1])//提示灯光考试结束
        simulateNightBean.setQuestion(tempQs)
        AYSdk.getInstance().sendCmd(0x8012, gson.toJson(simulateNightBean))
        sendMapInfo()
        sendVehicleInfo()
        MyLog.i(TAG,"查到的考试type="+examType)
        ExamPlatformData.getInstance().examType = examType
        val data = Data.Builder().putInt(Constant.EXAM_STATUS_TYPE,examType).build()
        if (examType != safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) {
            try {
                val jsonObject = JSONObject()
                jsonObject.put("exam", 1)
                jsonObject.put("type", examType)
                val examJson = jsonObject.toString()
                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.EXAM_STATUS, examJson)
            } catch (e: JSONException) {
                e.printStackTrace()
            }
        }
        var rtk =  WorkRoomDataBase.getWorkRoomDataBase(applicationContext).rtkConfigDao._getRtkConfig()
        if (rtk == null){
            try {
@@ -111,7 +107,18 @@
        sendSignalConfigsToRemote(indexs)
        val data = Data.Builder().putInt(Constant.EXAM_STATUS_TYPE,examType).build()
        if (examType != safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) {
            try {
                val jsonObject = JSONObject()
                jsonObject.put("exam", 1)
                jsonObject.put("type", examType)
                val examJson = jsonObject.toString()
                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.EXAM_STATUS, examJson)
            } catch (e: JSONException) {
                e.printStackTrace()
            }
        }
        return Result.success(data)
    }
@@ -160,4 +167,59 @@
        }
    }
    private fun sendMapInfo(){
        val mapPath = ExamPlatformData.getInstance().mapPath
        if (!TextUtils.isEmpty(mapPath)) {
            MyLog.i("调用更新Map路径后的地图$mapPath")
            val fileContent = FileUtil.readFile(mapPath)
            if (fileContent != null) {
                val str = String(fileContent)
                Log.i(TAG,"文件内容:$str")
                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_MAP_INFO, str)
            } else {
                MyLog.i(String.format("文件:%s不存在", mapPath))
                CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), "文件:" + mapPath + "不存在", Toast.LENGTH_SHORT).show() }
            }
        } else {
            MyLog.i("读取Assert目录下初始化的地图")
            var buffer: StringBuffer?
            buffer = FileUtil.readAssetTxtFile(applicationContext, safeluck.drive.evaluation.Constant.ROAD_MAP)
            if (buffer != null) {
                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_ROAD_MAP_INFO, buffer.toString())
            } else {
                MyLog.i( String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName))
                CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName), Toast.LENGTH_SHORT).show() }
            }
            buffer = FileUtil.readAssetTxtFile(applicationContext, safeluck.drive.evaluation.Constant.MAP)
            if (buffer != null) {
                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_MAP_INFO, buffer.toString())
            } else {
                MyLog.i( String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName))
                CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName), Toast.LENGTH_SHORT).show() }
            }
        }
    }
    private fun sendVehicleInfo(){
        val carPath = ExamPlatformData.getInstance().carModelPath
        if (!TextUtils.isEmpty(carPath)) {
            MyLog.i("使用更新后的Car模型地图$carPath")
            val bytes = FileUtil.readFile(carPath)
            if (bytes != null) {
                val str = String(bytes)
                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_VECHILE_PROFILE, str)
            } else {
                MyLog.i(String.format("文件:%s不存在", carPath))
            }
        } else {
            val vebuffer = FileUtil.readAssetTxtFile(applicationContext, safeluck.drive.evaluation.Constant.VEHICLE)
            if (vebuffer != null) {
                AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_VECHILE_PROFILE, vebuffer.toString())
            } else {
                MyLog.i(String.format("车辆模型模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName))
            }
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProj.java
@@ -21,7 +21,6 @@
 */
@Entity(tableName = "fail_projects",foreignKeys = {@ForeignKey(entity = CriteriaForI.class,
parentColumns = "item_id",childColumns = "emp_id",onDelete = CASCADE),@ForeignKey(entity = CriteriaForII.class,
        parentColumns = "item_id",childColumns = "emp_id",onDelete = CASCADE),@ForeignKey(entity = CriteriaForIII.class,
        parentColumns = "item_id",childColumns = "emp_id",onDelete = CASCADE)},indices = @Index(value = {"emp_id"}))
public class FailedProj {
    @PrimaryKey(autoGenerate = true)
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProjRepository.java
@@ -21,10 +21,12 @@
    private FailProjDao failProjDao;
    private LuKaoFailProjDao luKaofailProjDao;
    public FailedProjRepository(Application application) {
        WorkRoomDataBase dataBase = WorkRoomDataBase.getWorkRoomDataBase(application);
        failProjDao = dataBase.getFailProjDao();
        luKaofailProjDao = dataBase.getLuKaoFailProjDao();
    }
@@ -34,6 +36,15 @@
            public void run() {
                failProjDao.insert(proj);
            }
        });
    }
  public void insertLuKao(final LuKaoFailedProj proj) {
        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
            @Override
            public void run() {
                luKaofailProjDao.insert(proj);
            }
        });
    }
@@ -75,7 +86,7 @@
     * @return
     */
    public LiveData<List<FailedProj_select>> getFailedProjectsForIII(long stu_id) {
        return failProjDao.getFailedProjectsForIII(stu_id);
        return luKaofailProjDao.getFailedProjectsForIII(stu_id);
    }
app/src/main/java/safeluck/drive/evaluation/DB/failitems/FailedProj_select.java
@@ -10,7 +10,7 @@
 */
public class FailedProj_select {
    @ColumnInfo(name = "emp_id")
    private int emp_id;
    private long stu_id;
app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailProjDao.java
New file
@@ -0,0 +1,41 @@
package safeluck.drive.evaluation.DB.failitems;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import java.util.List;
/**
 * MyApplication2
 * Created by lzw on 2019/11/26. 18:08:08
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Dao
public interface LuKaoFailProjDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(LuKaoFailedProj proj);
  /**
     * 查询 科目三 路考考场的失败项目 (多表查询)
     * 如果要添加 科目二II   III类考场失败项目,需要建立相应的评判标准表数据表
     * @return
     */
    @Query("SELECT emp_id,stu_id,utc,sn,deducting_reason,score_deducting,item_content from criteria_three INNER JOIN lukao_fail_projects ON  criteria_three.item_id= lukao_fail_projects.emp_id where lukao_fail_projects.stu_id=:stu_id and lukao_fail_projects.subject=3")
    LiveData<List<FailedProj_select>> getFailedProjectsForIII(long stu_id);
    /**
     * 获取失败项目条数
     * @param subject_id
     * @return
     */
    @Query("SELECT COUNT(*)  from lukao_fail_projects where subject=:subject_id")
    LiveData<Integer> getSubject(int subject_id);
    @Query("delete from fail_projects")
    void deleteAll();
}
app/src/main/java/safeluck/drive/evaluation/DB/failitems/LuKaoFailedProj.java
New file
@@ -0,0 +1,107 @@
package safeluck.drive.evaluation.DB.failitems;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.Index;
import androidx.room.PrimaryKey;
import safeluck.drive.evaluation.DB.criterias.CriteriaForI;
import safeluck.drive.evaluation.DB.criterias.CriteriaForII;
import safeluck.drive.evaluation.DB.criterias.CriteriaForIII;
import static androidx.room.ForeignKey.CASCADE;
/**
 * MyApplication2
 * 失败项目条目
 * Created by lzw on 2019/11/26. 17:59:20
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Entity(tableName = "lukao_fail_projects",foreignKeys = {@ForeignKey(entity = CriteriaForIII.class,
        parentColumns = "item_id",childColumns = "emp_id",onDelete = CASCADE)},indices = @Index(value = {"emp_id"}))
public class LuKaoFailedProj {
    @PrimaryKey(autoGenerate = true)
    private int id;
    @ColumnInfo(name = "stu_id")
    private long  stu_id;
// =1 I类考场   ==2 II类考场 3-路考
    @ColumnInfo(name = "subject")
    private int  subject;
    //作为外键,对应I类考场的item_id
    @ColumnInfo(name = "emp_id")
    private int emp_id;
    private int  sn;
    private String utc;
    public LuKaoFailedProj(int subject, int emp_id, long stu_id, String utc, int sn) {
        this.subject = subject;
        this.emp_id = emp_id;
        this.stu_id = stu_id;
        this.sn = sn;
        this.utc = utc;
    }
    public int getSn() {
        return sn;
    }
    public void setSn(int sn) {
        this.sn = sn;
    }
    public String getUtc() {
        return utc;
    }
    public void setUtc(String utc) {
        this.utc = utc;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public long getStu_id() {
        return stu_id;
    }
    public void setStu_id(long stu_id) {
        this.stu_id = stu_id;
    }
    public int getSubject() {
        return subject;
    }
    public void setSubject(int subject) {
        this.subject = subject;
    }
    public int getEmp_id() {
        return emp_id;
    }
    public void setEmp_id(int emp_id) {
        this.emp_id = emp_id;
    }
    @Override
    public String toString() {
        return "FailedProj{" +
                "id=" + id +
                ", stu_id=" + stu_id +
                ", subject=" + subject +
                ", emp_id=" + emp_id +
                ", sn=" + sn +
                ", utc='" + utc + '\'' +
                '}';
    }
}
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -45,10 +45,12 @@
import safeluck.drive.evaluation.DB.failitems.FailedProj;
import safeluck.drive.evaluation.DB.failitems.FailedProjRepository;
import safeluck.drive.evaluation.DB.failitems.FailedProj_select;
import safeluck.drive.evaluation.DB.failitems.LuKaoFailedProj;
import safeluck.drive.evaluation.DB.gps.GpsInfoWorker;
import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
import safeluck.drive.evaluation.DB.rtktb.RTKConfigUpdateWorker;
import safeluck.drive.evaluation.DB.rtktb.RTKWorkRepository;
import safeluck.drive.evaluation.bean.ExamMap;
import safeluck.drive.evaluation.bean.ExamPlatformData;
import safeluck.drive.evaluation.cEventCenter.CEvent;
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
@@ -65,6 +67,7 @@
import safeluck.drive.evaluation.util.SPUtils;
import safeluck.drive.evaluation.util.SystemUtil;
import safeluck.drive.evaluation.worker.MCUUpgradeWorker;
import safeluck.drive.evaluation.worker.TTSWorker;
/**
 * MyApplication2
@@ -155,8 +158,8 @@
        }
        switch (cmd) {
            case Constant.NDK_START:
                sendVechileInfo();
                sendMapInfo();
//                sendVechileInfo();
//                sendMapInfo();
                OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
                OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
                WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
@@ -186,7 +189,9 @@
            case Constant.JUDGE_INFO:
                if(!TextUtils.isEmpty(json)){
                    Data judgeData = new Data.Builder().putString(Constant.TTS,json).build();
                    OneTimeWorkRequest ttswoker = new OneTimeWorkRequest.Builder(TTSWorker.class).setInputData(judgeData).build();
                    WorkManager.getInstance(getAppContext()).enqueue(ttswoker);
                    JsonArray jsonArray = JsonParser.parseString(json).getAsJsonArray();
                    for (int i = 0; i < jsonArray.size(); i++) {
                        JsonObject jsonObject = jsonArray.get(i).getAsJsonObject();
@@ -196,24 +201,24 @@
                        utc = utc.substring(2,utc.length()-3);
                        MyLog.i("评判消息解析之后的utc="+utc);
                        int sn = jsonObject.get("sn").getAsInt();
                        if (ExamPlatformData.getInstance().getExamType()==2){//场地评判消息
                            if (emp_id>31|| emp_id<0){
                                MyLog.i(TAG,"emp_id超出范围不能插入数据库(I类考场)");
                                return;
                            }
                            FailedProj failedProj = new FailedProj(Constant.SUBJECT_I, emp_id, Constant.TEST_STU_ID,utc,sn);
                            MyLog.i("插入fail_projects表="+failedProj.toString());
                            failedProjRepository.insert(failedProj);
                        }
                        if (ExamPlatformData.getInstance().getExamType()>2){//道路 评判消息
                            if (emp_id>66|| emp_id<1){
                                MyLog.i(TAG,"emp_id超出范围不能插入数据库(路考类考场)");
                                return;
                            }
                            FailedProj failedProj = new FailedProj(Constant.SUBJECT_III, emp_id, Constant.TEST_STU_ID,utc,sn);
                            MyLog.i("插入路考fail_projects表="+failedProj.toString());
//                        if (ExamPlatformData.getInstance().getExamType()==2){//场地评判消息
//                            if (emp_id>31|| emp_id<0){
//                                MyLog.i(TAG,"emp_id超出范围不能插入数据库(I类考场)");
//                                return;
//                            }
//                            FailedProj failedProj = new FailedProj(Constant.SUBJECT_I, emp_id, Constant.TEST_STU_ID,utc,sn);
//                            MyLog.i("插入fail_projects表="+failedProj.toString());
//                            failedProjRepository.insert(failedProj);
                        }
//                        }
//                        if (ExamPlatformData.getInstance().getExamType()>2){//道路 评判消息
//                            if (emp_id>66|| emp_id<1){
//                                MyLog.i(TAG,"emp_id超出范围不能插入数据库(路考类考场)");
//                                return;
//                            }
//                            LuKaoFailedProj failedProj = new LuKaoFailedProj(Constant.SUBJECT_III, emp_id, Constant.TEST_STU_ID,utc,sn);
//                            MyLog.i("插入路考fail_projects表="+failedProj.toString());
//                            failedProjRepository.insertLuKao(failedProj);
//                        }
                    }
                }
@@ -469,7 +474,8 @@
                            Toast.makeText(getAppContext(), "读取Assert目录下初始化的地图", Toast.LENGTH_SHORT).show();
                        }
                    });
                    StringBuffer buffer =FileUtil.readAssetTxtFile(getApplicationContext(),Constant.ROAD_MAP);
                    StringBuffer buffer;
                        buffer =FileUtil.readAssetTxtFile(getApplicationContext(),Constant.ROAD_MAP);
                    if (buffer != null){
                        AYSdk.getInstance().sendCmd(Constant.PUSH_ROAD_MAP_INFO,buffer.toString());
@@ -483,6 +489,21 @@
                        });
                    }
                        buffer =FileUtil.readAssetTxtFile(getApplicationContext(),Constant.MAP);
                        if (buffer != null){
                            AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,buffer.toString());
                        }else{
                            MyLog.d(TAG,String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+getApplicationContext().getPackageName()));
                            CThreadPoolExecutor.runOnMainThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(getAppContext(), String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+getApplicationContext().getPackageName()), Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                }
            }
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -287,8 +287,6 @@
                            mScoreAdapter.addDatas(mArrayList);
                            MyLog.i("item_score="+item_id);
                        }
                        //TODO 发送JKMessage0203 给平台,这儿有点复杂,看怎么处理
                        sendJKMessage0203(failedProj_selects);
                        MyLog.i("没扣分之前得分:"+currTotalScore);
                        currTotalScore -=item_id;
                        MyLog.i("路考当前得分:"+currTotalScore);
@@ -332,8 +330,6 @@
                        mScoreAdapter.addDatas(mArrayList);
                        MyLog.i("item_score="+item_id);
                    }
                    //TODO 发送JKMessage0203 给平台,这儿有点复杂,看怎么处理
                    sendJKMessage0203(failedProj_selects);
                    MyLog.i("没扣分之前得分:"+currTotalScore);
                    currTotalScore -=item_id;
                    MyLog.i("当前得分:"+currTotalScore);
@@ -425,59 +421,8 @@
        return view;
    }
    private List<Integer> sns =new ArrayList<>();
    private void sendJKMessage0203(List<FailedProj_select> failedProj_selects) {
        JKMessage0203 jkMessage0203 = new JKMessage0203();
        jkMessage0203.phone =  ExamPlatformData.getInstance().getPhone();
        jkMessage0203.ID = ExamPlatformData.getInstance().getID();
        jkMessage0203.exam_id = ExamPlatformData.getInstance().getExam_id();
        for (int i = 0; i < failedProj_selects.size(); i++) {
            if (hasSnEqulas(failedProj_selects.get(i).getSn())){
                MyLog.i("sn相同"+failedProj_selects.get(i).getSn());
            }else{
                ExamPlatformData.getInstance().getTTS().speak(failedProj_selects.get(i).getDeducting_reason()+(
                        failedProj_selects.get(i).getScore_deducting()==100?"不合格":"扣"+
                        failedProj_selects.get(i).getScore_deducting()+"分"));
                MyLog.i("没有相同的sn,发送"+failedProj_selects.get(i).getSn());
                sns.add(failedProj_selects.get(i).getSn());
                String utc =   failedProj_selects.get(i).getUtc();
                if (!TextUtils.isEmpty(utc)&&utc.length()>12){
                    utc =utc.substring(0,12);
                }
                jkMessage0203.timeBCD = utc ;
                jkMessage0203.fail_item_id = failedProj_selects.get(i).getEmp_id();
                jkMessage0203.fail_score = failedProj_selects.get(i).getScore_deducting();
                jkMessage0203.fail_reason = failedProj_selects.get(i).getDeducting_reason();
            }
        }
        MessageProcessor.getInstance().sendMessage(jkMessage0203);
    }
    private boolean hasSnEqulas(int failedProjSn){
        if (sns.size() > 0){
            for (int j = 0; j < sns.size(); j++) {
                MyLog.i("已存在的sn"+sns.get(j));
                if (sns.get(j) == failedProjSn){
                    MyLog.i("sn相同,不发"+sns.get(j));
                    return true;
                }else{
                    continue;
                }
            }
        }
        return false;
    }
    private void initView(View view) {
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -303,7 +303,7 @@
                        MyLog.i("item_score="+item_id);
                    }
                    //TODO 发送JKMessage0203 给平台,这儿有点复杂,看怎么处理
                    sendJKMessage0203(failedProj_selects);
//                    sendJKMessage0203(failedProj_selects);
                    MyLog.i("没扣分之前得分:"+currTotalScore);
                    currTotalScore -=item_id;
                    MyLog.i("当前得分:"+currTotalScore);
@@ -395,59 +395,53 @@
        return view;
    }
    private void sendJKMessage0203(List<FailedProj_select> failedProj_selects) {
        JKMessage0203 jkMessage0203 = new JKMessage0203();
        jkMessage0203.phone =  ExamPlatformData.getInstance().getPhone();
        jkMessage0203.ID = ExamPlatformData.getInstance().getID();
        jkMessage0203.exam_id = ExamPlatformData.getInstance().getExam_id();
//    private void sendJKMessage0203(List<FailedProj_select> failedProj_selects) {
//        JKMessage0203 jkMessage0203 = new JKMessage0203();
//        jkMessage0203.phone =  ExamPlatformData.getInstance().getPhone();
//        jkMessage0203.ID = ExamPlatformData.getInstance().getID();
//        jkMessage0203.exam_id = ExamPlatformData.getInstance().getExam_id();
//
//        for (int i = 0; i < failedProj_selects.size(); i++) {
//            if (hasSnEqulas(failedProj_selects.get(i).getSn())){
//                MyLog.i("sn相同"+failedProj_selects.get(i).getSn());
//            }else{
//                ExamPlatformData.getInstance().getTTS().speak(failedProj_selects.get(i).getDeducting_reason()+(
//                        failedProj_selects.get(i).getScore_deducting()==100?"不合格":"扣"+
//                                failedProj_selects.get(i).getScore_deducting()+"分"));
//                MyLog.i("没有相同的sn,发送"+failedProj_selects.get(i).getSn());
//                ExamPlatformData.getInstance().addSn(failedProj_selects.get(i).getSn());
//                String utc =   failedProj_selects.get(i).getUtc();
//                if (!TextUtils.isEmpty(utc)&&utc.length()>12){
//                    utc =utc.substring(0,12);
//                }
//                jkMessage0203.timeBCD = utc ;
//
//                jkMessage0203.fail_item_id = failedProj_selects.get(i).getEmp_id();
//                jkMessage0203.fail_score = failedProj_selects.get(i).getScore_deducting();
//                jkMessage0203.fail_reason = failedProj_selects.get(i).getDeducting_reason();
//            }
//
//        }
        for (int i = 0; i < failedProj_selects.size(); i++) {
            if (hasSnEqulas(failedProj_selects.get(i).getSn())){
                MyLog.i("sn相同"+failedProj_selects.get(i).getSn());
            }else{
                ExamPlatformData.getInstance().getTTS().speak(failedProj_selects.get(i).getDeducting_reason()+(
                        failedProj_selects.get(i).getScore_deducting()==100?"不合格":"扣"+
                                failedProj_selects.get(i).getScore_deducting()+"分"));
                MyLog.i("没有相同的sn,发送"+failedProj_selects.get(i).getSn());
                ExamPlatformData.getInstance().addSn(failedProj_selects.get(i).getSn());
                String utc =   failedProj_selects.get(i).getUtc();
                if (!TextUtils.isEmpty(utc)&&utc.length()>12){
                    utc =utc.substring(0,12);
                }
                jkMessage0203.timeBCD = utc ;
//        MessageProcessor.getInstance().sendMessage(jkMessage0203);
//    }
                jkMessage0203.fail_item_id = failedProj_selects.get(i).getEmp_id();
                jkMessage0203.fail_score = failedProj_selects.get(i).getScore_deducting();
                jkMessage0203.fail_reason = failedProj_selects.get(i).getDeducting_reason();
            }
        }
        MessageProcessor.getInstance().sendMessage(jkMessage0203);
    }
    private boolean hasSnEqulas(int failedProjSn){
        if (ExamPlatformData.getInstance().getSns().size() > 0){
            for (int j = 0; j < ExamPlatformData.getInstance().getSns().size(); j++) {
                MyLog.i("已存在的sn"+ExamPlatformData.getInstance().getSns().get(j));
                if (ExamPlatformData.getInstance().getSns().get(j) == failedProjSn){
                    MyLog.i("sn相同,不发"+ExamPlatformData.getInstance().getSns().get(j));
                    return true;
                }else{
                    continue;
                }
            }
        }
        return false;
    }
//    private boolean hasSnEqulas(int failedProjSn){
//        if (ExamPlatformData.getInstance().getSns().size() > 0){
//            for (int j = 0; j < ExamPlatformData.getInstance().getSns().size(); j++) {
//                MyLog.i("已存在的sn"+ExamPlatformData.getInstance().getSns().get(j));
//                if (ExamPlatformData.getInstance().getSns().get(j) == failedProjSn){
//                    MyLog.i("sn相同,不发"+ExamPlatformData.getInstance().getSns().get(j));
//                    return true;
//                }else{
//                    continue;
//                }
//            }
//
//        }
//        return false;
//
//    }
@@ -538,6 +532,7 @@
                    public void changKao() {
                        exam_type = 2;
                        iv_head.getDrawable().setLevel(1);
                        ExamPlatformData.getInstance().setExamType(exam_type);
                        examStatusViewModel.updateStartExam(exam_type);
                        sendExamJson(1,exam_type);
                        ExamPlatformData.getInstance().getTTS().speak("开始训练");
@@ -551,36 +546,14 @@
                    @Override
                    public void luKao() {
                        exam_type = 3;
                        ExamPlatformData.getInstance().setExamType(exam_type);
                        examStatusViewModel.updateStartExam(exam_type);
                        sendExamJson(1,exam_type);
                        if (simulateNightBean == null){
                            simulateNightBean = new SimulateNightBean();
                        }
                        iv_head.getDrawable().setLevel(1);
                        simulateNightBean.setExam(0);
                        ExamPlatformData.getInstance().getTTS().speak("开始训练");
                        ExamPlatformData.getInstance().setTrainingMode(true);//设置为训练模式
                        final List<SimulateNightBean.QuestionBean> list = ExamPlatformData.getInstance().getSimulate_light_tips();
                        simulateNightBean.setQuestion(list.subList(list.size()-2,list.size()-1));
                        AYSdk.getInstance().sendCmd(0x8012,gson.toJson(simulateNightBean));
                        jkMessage0202.curr_exam = 1;
                        MessageProcessor.getInstance().sendMessage(jkMessage0202);
                        tempQs.add(list.get(0));
                        int [] a =Utils.getRandomInts(4,12);
                        for (int i = 0; i < a.length; i++) {
                            tempQs.add(list.get(a[i]));
                        }
                        simulateNightBean.setQuestion(tempQs);
                        mHandler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                AYSdk.getInstance().sendCmd(0x8012,gson.toJson(simulateNightBean));
                                tempQs.clear();
                            }
                        },10*1000);
                    }
                });
app/src/main/java/safeluck/drive/evaluation/worker/TTSWorker.kt
New file
@@ -0,0 +1,101 @@
package safeluck.drive.evaluation.worker
import android.content.Context
import android.text.TextUtils
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.anyun.exam.lib.MyLog
import com.google.gson.Gson
import com.google.gson.JsonParser
import safeluck.drive.evaluation.Constant
import safeluck.drive.evaluation.DB.WorkRoomDataBase
import safeluck.drive.evaluation.DB.failitems.FailedProj
import safeluck.drive.evaluation.DB.failitems.LuKaoFailedProj
import safeluck.drive.evaluation.bean.ExamPlatformData
import safeluck.drive.evaluation.im.MessageProcessor
import safeluck.drive.evaluation.platformMessage.JKMessage0203
/**
 * 一收到远程服务给的评判消息
 * 实现插入科二、科三失败项目表
 * 播放tts
 * 发送0203评判消息给服务器
 */
class TTSWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
    var gson:Gson =Gson()
    override fun doWork(): Result {
        val jkMessage0203 = JKMessage0203()
        jkMessage0203.phone = ExamPlatformData.getInstance().phone
        jkMessage0203.ID = ExamPlatformData.getInstance().id
        jkMessage0203.exam_id = ExamPlatformData.getInstance().exam_id
        var ttsInput = inputData.getString(Constant.TTS);
        val jsonArray = JsonParser.parseString(ttsInput).asJsonArray
        for ( i in 0 until jsonArray.size()) {
            val jsonObject = jsonArray[i].asJsonObject
            val emp_id = jsonObject["wrong_id"].asInt
            var utc = jsonObject["utc"].asString
            MyLog.i("评判消息解析之前的utc=$utc")
            utc = utc.substring(2, utc.length - 3)
            MyLog.i("评判消息解析之后的utc=$utc")
        val sn = jsonObject["sn"].asInt
            if (emp_id>1000){
                var ttsStr=WorkRoomDataBase.getWorkRoomDataBase(applicationContext).criteriaIIIDao.queryItemForCriteriaIIINoLive(emp_id-1000)
                ExamPlatformData.getInstance().tts.speak(ttsStr.getDeducting_reason() + if (ttsStr.getScore_deducting() == 100) "不合格" else "扣" +
                        ttsStr.getScore_deducting() + "分")
                jkMessage0203.fail_item_id = ttsStr.item_id
                        jkMessage0203.fail_score = ttsStr.score_deducting
                jkMessage0203.fail_reason = ttsStr.deducting_reason
            }else{
                var ttsStr=WorkRoomDataBase.getWorkRoomDataBase(applicationContext).criteriaIDao.queryItemForCriteriaINoLive(emp_id)
                ExamPlatformData.getInstance().tts.speak(ttsStr.getDeducting_reason() + if (ttsStr.getScore_deducting() == 100) "不合格" else "扣" +
                        ttsStr.getScore_deducting() + "分")
                jkMessage0203.fail_item_id =ttsStr.item_id
                        jkMessage0203.fail_score = ttsStr.score_deducting
                jkMessage0203.fail_reason = ttsStr.deducting_reason
            }
            if (!TextUtils.isEmpty(utc) && utc.length > 12) {
                utc = utc.substring(0, 12)
            }
            jkMessage0203.timeBCD = utc
            MessageProcessor.getInstance().sendMessage(jkMessage0203)
            if (emp_id<1000) { //场地评判消息
                if (emp_id > 31 || emp_id < 0) {
                    MyLog.i("emp_id超出范围不能插入数据库(I类考场)")
                }else{
                    val failedProj = FailedProj(Constant.SUBJECT_I, emp_id, Constant.TEST_STU_ID, utc, sn)
                    MyLog.i("插入fail_projects表=$failedProj")
                    WorkRoomDataBase.getWorkRoomDataBase(applicationContext).failProjDao.insert(failedProj)
                }
            }
            if (emp_id>1000) { //道路 评判消息
                if (emp_id >1066 || emp_id < 1000) {
                    MyLog.i("emp_id超出范围不能插入数据库(路考类考场)")
                }else{
                    val failedProj = LuKaoFailedProj(Constant.SUBJECT_III, (emp_id-1000), Constant.TEST_STU_ID, utc, sn)
                    MyLog.i("插入路考fail_projects表=$failedProj")
                    WorkRoomDataBase.getWorkRoomDataBase(applicationContext).luKaoFailProjDao.insert(failedProj)
                }
            }
        }
        return Result.success()
    }
}