lizhanwei
2020-07-27 753ef56294899a5495ec565de0a1337cb81f4849
发送灯光等不在worker里面,容易出问题
8个文件已修改
1个文件已添加
246 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragmentaa.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java
@@ -28,7 +28,7 @@
    public AppStatusWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
        MyLog.i("初始化AppStatusWorker");
        MyLog.i(TAG,"初始化AppStatusWorker");
        appStatusDao = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getAppStatusDao();
    }
@@ -37,7 +37,7 @@
    public Result doWork() {
        String[] str = getInputData().getStringArray(Constant.APP_STATUS);
        JSONObject jsonObject = null;
        MyLog.i("AppStatusWorker:"+str[0]+": "+str[1]);
        MyLog.i(TAG,"AppStatusWorker:"+str[0]+": "+str[1]);
        try {
            jsonObject = new JSONObject(str[1]);
            switch (str[0]) {
app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java
@@ -40,7 +40,6 @@
        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
            @Override
            public void run() {
                examStatusDao.updateStartExam(startex);
            }
        });
app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -125,7 +125,8 @@
        hideBottomUIMenu();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        //初始化tts
        ExamPlatformData.getInstance().initTTS(getApplicationContext());
        viewtitle = findViewById(R.id.top_title);
        btn_return = findViewById(R.id.btn_return);
@@ -141,8 +142,7 @@
        tv_network_time.setText(Utils.getHHmm());
        //初始化tts
        ExamPlatformData.getInstance().initTTS(getApplicationContext());
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -52,6 +52,7 @@
import safeluck.drive.evaluation.platformMessage.JKMessage0206;
import safeluck.drive.evaluation.platformMessage.PlatFormConstant;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.DataInitKt;
import safeluck.drive.evaluation.util.FileUtil;
import safeluck.drive.evaluation.util.SystemUtil;
import safeluck.drive.evaluation.util.Utils;
@@ -108,11 +109,15 @@
            MyLog.i("开始初始化数据发送地图/车辆/mcu升级文件/考试状态");
                int type = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getExamStatusDao().getStartExamInt();
                ExamPlatformData.getInstance().setExamType(type);
            OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
//            OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
            sendMapInfo();
            sendVechileInfo();
            OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
            WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
            DataInitKt.MCUUpgrade(getApplicationContext());
            DataInitKt.sendExamLights(getApplicationContext());
            DataInitKt.sendRtkConfig(getApplicationContext());
            DataInitKt.sendSignalConfigToRemote(getApplicationContext());
//            OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
//            WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
        });
    }
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java
@@ -286,9 +286,11 @@
        return enter_exit_item_tts.get(item);
    }
    public Speaker getTTS(){
    public synchronized Speaker getTTS(){
        if (speaker == null){
            throw new RuntimeException("请先初始化TTS,先调用initTTS");
            MyLog.i("请先初始化TTS,先调用initTTS");
            initTTS(app.getAppContext());
            return speaker;
        }else
        return speaker;
    }
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -460,12 +460,13 @@
                    examStatusList.clear();
                    examStatusList.addAll(examStatus);
                    mHandler.obtainMessage(ADD_DATA).sendToTarget();
                    if (examStatus.get(0).getStartExam() != Constant.NONE_BEEN_START_EXAM){
                    exam_type = examStatus.get(0).getStartExam();
                    if (exam_type != Constant.NONE_BEEN_START_EXAM){
                        btn_start_exam.setText("结束考试");
                    }else{
                        btn_start_exam.setText("开始考试");
                    }
                    exam_type = examStatus.get(0).getStartExam();
                }
@@ -685,6 +686,7 @@
        ExamPlatformData.getInstance().getTTS().speak("开始考试");
        Date date = new Date();
        MyLog.i("修改exam_status表的startExam字段为"+exam_type);
        wokViewModel.updateBeginTime(date.getTime());
        jkMessage0202.timeBCD = date;
        ExamPlatformData.getInstance().setExam_id(Utils.parseUnsignedInt(String.valueOf(date.getTime()/1000),10));
app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragmentaa.java
@@ -59,7 +59,7 @@
public class RoadDriveMapFragmentaa extends SupportFragment implements View.OnClickListener {
    private static final int ALL_MAP = 100;
    private int pixels = 80;
    private int pixels = 3;
    private boolean isDrawing = false;
    private StringBuffer buffer = null;//存放地图的buffer
@@ -865,7 +865,7 @@
        scale_x = Math.round(Math.abs(50 / Math.sqrt(Math.pow(car[0][0], 2) + Math.pow(car[0][1], 2)) ));
        scale_x = 3;
        scale_x = pixels;
        scale_y = scale_x;
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -449,16 +449,17 @@
                Log.i(TAG, "ExamStatus onChanged: ");
                if (examStatus!=null && examStatus.size()>0){
                    showChangKaoOrLukao(examStatus.get(0).getStartExam());
                    MyLog.i(TAG,"考试状态更新"+examStatus.get(0).getStartExam());
                    MyLog.i("考试状态更新"+examStatus.get(0).getStartExam());
                    examStatusList.clear();
                    examStatusList.addAll(examStatus);
                    mHandler.obtainMessage(ADD_DATA).sendToTarget();
                    if (examStatus.get(0).getStartExam() != Constant.NONE_BEEN_START_EXAM){
                    exam_type = examStatus.get(0).getStartExam();
                    if (exam_type != Constant.NONE_BEEN_START_EXAM){
                        btn_start_exam.setText("结束训练");
                    }else{
                        btn_start_exam.setText("开始训练");
                    }
                    exam_type = examStatus.get(0).getStartExam();
                }
app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt
New file
@@ -0,0 +1,201 @@
package safeluck.drive.evaluation.util
import android.content.Context
import androidx.work.Data
import androidx.work.ListenableWorker
import com.anyun.exam.lib.AYSdk
import com.anyun.exam.lib.MyLog
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.google.gson.stream.JsonReader
import org.json.JSONException
import org.json.JSONObject
import safeluck.drive.evaluation.Constant
import safeluck.drive.evaluation.DB.WorkRoomDataBase
import safeluck.drive.evaluation.DB.rtktb.RTKConfig
import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig
import safeluck.drive.evaluation.bean.ExamPlatformData
import safeluck.drive.evaluation.bean.SignalConfigRemote
import safeluck.drive.evaluation.bean.SimulateNightBean
import safeluck.drive.evaluation.worker.MCUUpgradeWorker
import java.io.IOException
import java.io.InputStreamReader
import java.nio.charset.Charset
/**
 *
 * @ProjectName: DriveJudge
 * @Package: safeluck.drive.evaluation.util
 * @ClassName: DataInit
 * @Description: java类作用描述
 * @Author: 李占伟
 * @CreateDate: 20/7/26 下午4:44
 * @UpdateUser: 更新者
 * @UpdateDate: 20/7/26 下午4:44
 * @UpdateRemark: 更新说明
 * @Version: 1.0
 */
fun MCUUpgrade(applicationContext:Context) {
    MyLog.i("升级单片机")
    try {
        val datas = FileUtil.readLocalFile(applicationContext, "dfu.bin")
        if (datas != null) {
            val strs = String(datas, Charset.forName("ISO-8859-1"))
            AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs)
            FileUtil.deleteFile("", Constant.MCU_FILE_NAME);
        } else {
            MyLog.i( "mcu升级文件不存在")
            var data = Data.Builder().putString(Constant.MCU_UPGRADE_FAIL_RESASON,"mcu升级文件不存在").build()
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
}
private val gson = Gson()
private val tempQs: MutableList<SimulateNightBean.QuestionBean> = java.util.ArrayList()
var  simulateNightBean:SimulateNightBean=SimulateNightBean()
fun sendExamLights(applicationContext: Context){
    MyLog.i("发送灯光")
    val examType = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).examStatusDao.startExamInt;
    simulateNightBean.setExam(0)
    val list = ExamPlatformData.getInstance().simulate_light_tips
    tempQs.add(list[list.size-2])//提示下面将进行灯光考试
    tempQs.add(list[0])
    val a = Utils.getRandomInts(4, 12)
    for (i in a.indices) {
        tempQs.add(list[a[i]])
    }
    tempQs.add(list[list.size-1])//提示灯光考试结束
    simulateNightBean.setQuestion(tempQs)
    MyLog.i("开始发送灯光,考试项共有"+simulateNightBean.question.size)
    AYSdk.getInstance().sendCmd(0x8012, gson.toJson(simulateNightBean))
    //发送考试状态
    MyLog.i("查到的考试type=$examType")
    try {
        val jsonObject = JSONObject()
        if (examType == safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) {
            jsonObject.put("exam", 0)
        }else{
            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()
    }
}
fun sendRtkConfig(applicationContext: Context){
    var rtk =  WorkRoomDataBase.getWorkRoomDataBase(applicationContext).rtkConfigDao._getRtkConfig()
    if (rtk == null){
        try {
            MyLog.i("读文件发送RTK配置")
            val inputStream = applicationContext.assets.open(safeluck.drive.evaluation.Constant.RTK_CONFIG_JSON)
            val inputStreamReader = InputStreamReader(inputStream)
            val jsonReader = JsonReader(inputStreamReader)
            val gson = Gson()
            val type = object : TypeToken<RTKConfig?>() {}.type
            val mstus = gson.fromJson<RTKConfig>(jsonReader, type)
            rtk = mstus
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }else{
    }
    sendRtkConfigInfo(rtk)
}
private var signalConfiglist: MutableList<SignalConfigRemote> = ArrayList()
private fun sendRtkConfigInfo(mRTKConfig: RTKConfig) {
    if (mRTKConfig != null) {
        var rtkjson = gson.toJson(mRTKConfig)
        //去除id字段
        var jsonObject: JSONObject? = null
        try {
            jsonObject = JSONObject(rtkjson)
        } catch (e: JSONException) {
            e.printStackTrace()
        }
        jsonObject!!.remove("_id")
        rtkjson = null
        rtkjson = jsonObject.toString()
        MyLog.i("NDK_start RTK配置信息")
        AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_RTK_PLATFORM_INFO, rtkjson)
    } else {
        MyLog.i("RTKConfig未取到数据")
    }
}
private var singalConfigs :List<SingalConfig> = ArrayList()
fun sendSignalConfigToRemote(applicationContext: Context){
    singalConfigs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao._getSignalConfigs()
    if (singalConfigs ==null){
        MyLog.i("读文件发送信号配置")
        try {
            val inputStream = applicationContext.assets.open("signal_config_file.json")
            val inputStreamReader = InputStreamReader(inputStream)
            val jsonReader = JsonReader(inputStreamReader)
            val gson = Gson()
            val type = object : TypeToken<List<SingalConfig?>?>() {}.type
            val mstus = gson.fromJson<List<SingalConfig>>(jsonReader, type)
            singalConfigs = mstus
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }else{
    }
    for (i in singalConfigs.indices) {
        val signalConfigRemote = SignalConfigRemote()
        signalConfigRemote.func_id = singalConfigs.get(i).func_id
        signalConfigRemote.gpio_num = singalConfigs.get(i).getIndex()-1
        signalConfigRemote.level = singalConfigs.get(i).getHighLevel()
        signalConfiglist.add(signalConfigRemote)
    }
    var indexs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao.allIndexs
    sendSignalConfigsToRemote_(indexs)
}
private fun sendSignalConfigsToRemote_(indexs: List<Int>) {
    if (signalConfiglist.size > 0) {
        if (listContainsSameValue(indexs)) {
            MyLog.i("sendSignalConfigsToRemote: 有相同的index,不能发送" + gson.toJson(signalConfiglist))
        } else {
            AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.SEND_CONFIG_SIGNAL, gson.toJson(signalConfiglist))
        }
    }
}
private fun listContainsSameValue(indexs: List<Int>): Boolean {
    for (i in indexs.indices) { //可以默认是0  0不判断是否有相同的index
        if (indexs[i] == 0) {
            continue
        }
        for (j in i + 1 until indexs.size) {
            if (indexs[i] === indexs[j]) {
                return true
            }
        }
    }
    return false
}