package safeluck.drive.evaluation;
|
|
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;
|
|
import com.anyun.exam.lib.AYSdk;
|
import com.anyun.exam.lib.IAYExamListener;
|
|
import me.yokeyword.fragmentation.Fragmentation;
|
import me.yokeyword.fragmentation.helper.ExceptionHandler;
|
|
import com.anyun.basecommonlib.MyLog;
|
import com.anyun.exam.lib.crash.CrashHandler;
|
import com.facebook.stetho.Stetho;
|
import com.google.gson.Gson;
|
import com.google.gson.JsonArray;
|
import com.google.gson.JsonObject;
|
import com.google.gson.JsonParser;
|
|
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
import java.io.File;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
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;
|
import safeluck.drive.evaluation.DB.rtktb.RTKConfigUpdateWorker;
|
import safeluck.drive.evaluation.bean.AbsInitialData;
|
import safeluck.drive.evaluation.bean.ExamPlatformData;
|
import safeluck.drive.evaluation.bean.RemoteRouteCollect;
|
import safeluck.drive.evaluation.bean.RouteCollect;
|
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
|
import safeluck.drive.evaluation.im.MessageProcessor;
|
import safeluck.drive.evaluation.platformMessage.AttachInfo;
|
import safeluck.drive.evaluation.platformMessage.AttachInfo2;
|
import safeluck.drive.evaluation.platformMessage.JKMessage0203;
|
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.SPUtils;
|
import safeluck.drive.evaluation.util.SystemUtil;
|
import safeluck.drive.evaluation.util.Utils;
|
|
import static safeluck.drive.evaluation.util.DataInitKt.sendJudgeArgs;
|
|
/**
|
* MyApplication2
|
* Created by lzw on 2019/3/15. 10:53:52
|
* 邮箱:632393724@qq.com
|
* All Rights Saved! Chongqing AnYun Tech co. LTD
|
*/
|
public class app extends Application implements IAYExamListener {
|
|
private static final String TAG = "JiaKaoApplication";
|
private static Context appContext=null;
|
@Override
|
public void onCreate() {
|
super.onCreate();
|
//初始化Fragment 建议在Application onCreate里面初始化
|
if (SystemUtil.compareProcessName(this)) {
|
Fragmentation.builder().stackViewMode(Fragmentation.BUBBLE).debug(false)
|
.handleException(new ExceptionHandler() {
|
@Override
|
public void onException(@NonNull Exception e) {
|
MyLog.i(TAG, "onException: " + e.getMessage());
|
}
|
})
|
.install();
|
|
|
|
|
CrashHandler crashHandler = CrashHandler.getInstance();
|
crashHandler.init(getApplicationContext());
|
AYSdk.getInstance().init(getApplicationContext());
|
AYSdk.getInstance().registListener(this);
|
Stetho.initializeWithDefaults(this);
|
|
appContext = this;
|
|
//数据库操作
|
MyLog.i(TAG, "onCreate111");
|
FileUtil.createdirs(getApplicationContext());
|
|
//考试状态 ,一些初始状态,app一些状态应该先初始化一下
|
|
// ExamPlatformData.getInstance().setMcuSN("0314200100000004");
|
// ExamPlatformData.getInstance().setCanWriteSD(true);
|
}
|
|
}
|
|
private void sendExamJson(int type) {
|
try {
|
MyLog.i("收到错误码之后,发送考试状态,examType="+type);
|
JSONObject jsonObject = new JSONObject();
|
if (type != Constant.NONE_BEEN_START_EXAM){
|
|
jsonObject.put("exam", 1);
|
}else{
|
|
jsonObject.put("exam", 0);
|
}
|
jsonObject.put("type", type);
|
String examJson = jsonObject.toString();
|
Log.i(TAG, "onClick: " + examJson);
|
AYSdk.getInstance().sendCmd(Constant.EXAM_STATUS, examJson);
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
}
|
|
private void initData() {
|
CThreadPoolExecutor.runInBackground(()->{
|
int type = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getExamStatusDao().getStartExamInt();
|
MyLog.i("考试状态="+type);
|
ExamPlatformData.getInstance().setExamType(type);
|
//发送蓝牙配置消息
|
String mac= (String) SPUtils.get(getAppContext(),SPUtils.BLUETOOTH_MAC,"");
|
if (!TextUtils.isEmpty(mac)){
|
JSONObject jsonObject = new JSONObject();
|
try {
|
|
jsonObject.put("bluetooth_addr",mac);
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
|
String json = jsonObject.toString();
|
Log.i(TAG,json);
|
AYSdk.getInstance().sendCmd(Constant.ID_MS_BLUETOOTH_NAME,json);
|
}
|
|
|
sendRouteExam();
|
//2021 1. 12
|
// DataInitKt.sendRtkConfig(getApplicationContext());
|
// DataInitKt.MCUUpgrade(getApplicationContext());
|
|
//改在蓝牙已经连接,发送initialdata
|
|
|
|
|
|
|
|
});
|
}
|
|
private void sendRouteExam() {
|
if (CThreadPoolExecutor.isOnMainThread()){
|
Log.i(TAG,"sendRouteExam 运行在主线,需要在子线程发送线路");
|
CThreadPoolExecutor.runInBackground(()->{
|
opDBAndSendRoute();
|
});
|
}else{
|
Log.i(TAG,"sendRouteExam 运行子线程");
|
opDBAndSendRoute();
|
}
|
}
|
|
private void opDBAndSendRoute() {
|
List<RouteCollect.CrossingActiveBean> crossingActiveBeans = new ArrayList<>();
|
List<RouteCollect.TriggerLineBean> triggerLineBeans = new ArrayList<>();
|
|
RemoteRouteCollect remoteRouteCollect = new RemoteRouteCollect();
|
RouteCollect routeCollect = new RouteCollect();
|
List<RouteCollect> routeCollects = new ArrayList<>();
|
String routeName = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getRouteBeanDao().getCurrRouteName(ExamPlatformData.getInstance().getExamRoute());
|
routeCollect.setName(routeName);
|
List<RouteTriggerLine> routeTriggerLines = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getRouteTriggerLineDao().getAllRouteTriggerLine(ExamPlatformData.getInstance().getExamRoute());
|
List<RouteCross> routeCrosses = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext().getApplicationContext()).getRouteCrooDao().getAllRouteCross(ExamPlatformData.getInstance().getExamRoute());
|
for (RouteTriggerLine line:routeTriggerLines){
|
List<Double> xy = new ArrayList<>();
|
RouteCollect.TriggerLineBean triggerLineBean = new RouteCollect.TriggerLineBean();
|
int road = line.getRoad();
|
int type = line.getType();
|
|
double x = line.getX();
|
double y = line.getY();
|
xy.clear();
|
xy.add(x);
|
xy.add(y);
|
triggerLineBean.setRoad(road);
|
triggerLineBean.setType(type);
|
triggerLineBean.setX_y(xy);
|
triggerLineBeans.add(triggerLineBean);
|
|
|
}
|
routeCollect.setTrigger_line(triggerLineBeans);
|
|
for (RouteCross routeCross:routeCrosses){
|
int idx = routeCross.getIdx();
|
int road = routeCross.getRoad();
|
int active = routeCross.getActive();
|
RouteCollect.CrossingActiveBean crossingActiveBean = new RouteCollect.CrossingActiveBean();
|
crossingActiveBean.setActive(active);
|
crossingActiveBean.setIdx(idx);
|
crossingActiveBean.setRoad(road);
|
crossingActiveBeans.add(crossingActiveBean);
|
}
|
routeCollect.setCrossing_active(crossingActiveBeans);
|
routeCollects.add(routeCollect);
|
|
remoteRouteCollect.setScheme(routeCollects);
|
String str = new Gson().toJson(remoteRouteCollect);
|
Log.i(TAG,"json====="+str);
|
AYSdk.getInstance().sendCmd(0x8017,str);
|
}
|
|
|
|
public static Context getAppContext(){
|
return appContext;
|
}
|
|
@Override
|
public void onTerminate() {
|
super.onTerminate();
|
MyLog.e(TAG, "OnTerminate()");
|
AYSdk.getInstance().uninit();
|
}
|
|
@Override
|
public void onLowMemory() {
|
super.onLowMemory();
|
MyLog.e(TAG, "OnTerminate()");
|
}
|
|
private String lastStr;
|
private String lastSn;
|
private int mapId = 0;
|
int type = 0;
|
int enter_status = -1;
|
@Override
|
public void callBackMsg(final int cmd, String json) {
|
if (cmd!=11 && cmd!=14){
|
String strConent = String.format("收到命令[%d],Json内容为%s,线程号=%d,时间=%s", cmd, json,Thread.currentThread().getId(),Utils.formatTimeYYMMDDHHmmSSSSS(System.currentTimeMillis()));
|
if (strConent.equalsIgnoreCase(lastStr)){
|
|
}else{
|
|
MyLog.d(TAG,strConent );
|
lastStr = strConent;
|
}
|
}
|
|
switch (cmd) {
|
case Constant.ID_SM_BLUETOOTH_BRIEF:
|
CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
|
break;
|
case Constant.NDK_START:
|
|
|
|
|
break;
|
case Constant.RTK_PLATFORM_REGISTER_STATUS:
|
CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
|
|
//RTK平台注册状态,需要保存数据库
|
|
break;
|
case Constant.RTK_PLATFORM_REGISTER_RESULT:
|
String[] strs = new String[2];
|
strs[0] = Constant.RTK_LOGIN_CODE_COLUMN;
|
strs[1] = json;
|
//RTK平台登录结果
|
Data rtkLoginData = new Data.Builder().putStringArray(Constant.APP_STATUS,strs).build();
|
OneTimeWorkRequest loginWorkRequest = new OneTimeWorkRequest.Builder(AppStatusWorker.class).setInputData(rtkLoginData).build();
|
WorkManager.getInstance(getApplicationContext()).enqueue(loginWorkRequest);
|
|
break;
|
case Constant.FETCH_RTK_PLATFORM_INFO:
|
// CEventCenter.dispatchEvent(Constant.BIND_RTKCONFIG_TOPIC,cmd,0,"");
|
break;
|
case Constant.JUDGE_INFO:
|
if (ExamPlatformData.getInstance().getTrainingMode()==ExamPlatformData.ROUTE_MODE){
|
MyLog.i(TAG,"采集模式不接受评判消息");
|
return;
|
}
|
if(!TextUtils.isEmpty(json)){
|
final JKMessage0203 jkMessage0203 = new JKMessage0203();
|
|
final JsonArray jsonArray = (JsonArray) JsonParser.parseString(json);
|
//
|
|
CThreadPoolExecutor.runInBackground(new Runnable() {
|
@Override
|
public void run() {
|
for (int i = 0; i < jsonArray.size(); i++) {
|
JsonObject jsonObject = jsonArray.get(i).getAsJsonObject();
|
int emp_id = jsonObject.get("wrong_id").getAsInt();
|
String utc = jsonObject.get("utc").getAsString();
|
int sn = jsonObject.get("sn").getAsInt();
|
// if (emp_id>1000){
|
// CriteriaForIII ttsStr=WorkRoomDataBase.getWorkRoomDataBase(getAppContext()).getCriteriaIIIDao().queryItemForCriteriaIIINoLive(emp_id-1000);
|
// ExamPlatformData.getInstance().getTTS().speak(ttsStr.getDeducting_reason() + (ttsStr.getScore_deducting() == 100? "不合格 " : "扣" +
|
// ttsStr.getScore_deducting() + "分 "));
|
// jkMessage0203.fail_item_id =ttsStr.getItem_id();
|
// jkMessage0203.fail_score = ttsStr.getScore_deducting();
|
// jkMessage0203.fail_reason = ttsStr.getDeducting_reason();
|
// }else{
|
// CriteriaForI ttsStr = WorkRoomDataBase.getWorkRoomDataBase(getAppContext()).getCriteriaIDao().queryItemForCriteriaINoLive(emp_id);
|
// ExamPlatformData.getInstance().getTTS().speak(ttsStr.getDeducting_reason() + (ttsStr.getScore_deducting() == 100? "不合格 " : "扣" +
|
// ttsStr.getScore_deducting() + "分 "));
|
// jkMessage0203.fail_item_id =ttsStr.getItem_id();
|
// jkMessage0203.fail_score = ttsStr.getScore_deducting();
|
// jkMessage0203.fail_reason = ttsStr.getDeducting_reason();
|
// }
|
|
|
|
|
|
|
|
|
|
|
Criteria ttsStr=WorkRoomDataBase.getWorkRoomDataBase(getAppContext()).getCriteriaDao().queryItemForCriteriaNoLive(emp_id);
|
ExamPlatformData.getInstance().getTTS().speak(ttsStr.getDeducting_reason() + (ttsStr.getScore_deducting() == 100? "不合格 " : "扣" +
|
ttsStr.getScore_deducting() + "分 "));
|
jkMessage0203.fail_item_id =ttsStr.getItem_id();
|
jkMessage0203.fail_score = ttsStr.getScore_deducting();
|
jkMessage0203.fail_reason = ttsStr.getDeducting_reason();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!TextUtils.isEmpty(utc) && utc.length() > 14) {
|
utc = utc.substring(0, 14);
|
}
|
Date date = new Date(Utils.utc2NetWorkTime(utc));
|
jkMessage0203.timeBCD = date;
|
jkMessage0203.exam_id = ExamPlatformData.getInstance().getExam_id();
|
MyLog.i(String.format("收到远程服务给的评判消息 timeBCD=%s",Utils.formatTimeYYMMDDHHmmSS(jkMessage0203.timeBCD.getTime())));
|
|
MessageProcessor.getInstance().sendMessage(jkMessage0203);
|
// if (emp_id<1000) { //场地评判消息
|
// if (emp_id > 31 || emp_id < 0) {
|
// MyLog.i("emp_id超出范围不能插入数据库(I类考场)");
|
//
|
// }else{
|
//
|
// FailedProj failedProj = new FailedProj(Constant.SUBJECT_I, emp_id, Constant.TEST_STU_ID, utc, sn);
|
// MyLog.i("插入fail_projects表=$failedProj");
|
// WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getFailProjDao().insert(failedProj);
|
// }
|
//
|
// }
|
// if (emp_id>1000) { //道路 评判消息
|
//
|
// if (emp_id >1066 || emp_id < 1000) {
|
// MyLog.i("emp_id超出范围不能插入数据库(路考类考场)");
|
// }else{
|
//
|
// LuKaoFailedProj failedProj = new LuKaoFailedProj(Constant.SUBJECT_III, (emp_id-1000), Constant.TEST_STU_ID, utc, sn);
|
// MyLog.i("插入路考fail_projects表=$failedProj");
|
// WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getLuKaoFailProjDao().insert(failedProj);
|
// }
|
//
|
// }
|
|
|
|
|
|
|
FailedProj failedProj = new FailedProj(Constant.SUBJECT_ALL, emp_id, Constant.TEST_STU_ID, utc, sn);
|
MyLog.i("插入fail_projects表=$failedProj");
|
WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getFailProjDao().insert(failedProj);
|
|
|
|
|
|
|
|
|
}
|
}
|
});
|
|
|
|
}
|
|
break;
|
case Constant.EXAM_STATUS_REPLY:
|
MyLog.d(TAG, "考试开始,复位数据库失败项目表");
|
|
try {
|
JSONObject jsonObject =new JSONObject((String)json);
|
int errCode = jsonObject.getInt("error");
|
MyLog.i("收到考试应答错误码="+errCode);
|
switch (errCode){
|
case -1:
|
if (ExamPlatformData.getInstance().getExamType()>ExamPlatformData.EXAM_TYPE_ChangKAO){
|
if (TextUtils.isEmpty(ExamPlatformData.getInstance().getRoadMapPath())){
|
MyLog.i("开始考试后,远程服务缺少路考地图,但地图确实不存在无法发送给远程服务");
|
CThreadPoolExecutor.runOnMainThread(() -> Toast.makeText(appContext, "缺少路考地图,请前往\"设置\"选择地图", Toast.LENGTH_SHORT).show());
|
|
return;
|
}
|
}
|
if (ExamPlatformData.getInstance().getExamType()==ExamPlatformData.EXAM_TYPE_ChangKAO){
|
if (TextUtils.isEmpty(ExamPlatformData.getInstance().getMapPath())){
|
MyLog.i("开始考试后,远程服务缺少chang考地图,但地图确实不存在无法发送给远程服务");
|
CThreadPoolExecutor.runOnMainThread(new Runnable() {
|
@Override
|
public void run() {
|
Toast.makeText(appContext, "缺少场考地图,请前往\"设置\"选择地图", Toast.LENGTH_SHORT).show();
|
|
}
|
});
|
|
return;
|
}
|
}
|
|
DataInitKt.sendMapInfo();
|
DataInitKt.sendRoadMapInfo();
|
sendExamJson(ExamPlatformData.getInstance().getExamType());
|
break;
|
case -2:
|
|
DataInitKt.sendVehicleInfo();
|
sendExamJson(ExamPlatformData.getInstance().getExamType());
|
break;
|
case -3:
|
sendRouteExam();
|
sendJudgeArgs();
|
Data data = new Data.Builder().putInt(Constant.NEED_MAPS_CAR,1).build();
|
OneTimeWorkRequest examStatausOutWorker1 = new OneTimeWorkRequest.Builder(ExamStatusOutWorker.class)
|
.setInputData(data).build();
|
WorkManager.getInstance(getApplicationContext()).enqueue(examStatausOutWorker1);
|
|
break;
|
}
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
break;
|
case Constant.RTK_PLATFORM_CONNECT_STATUS:
|
String[] conn_strs = new String[2];
|
conn_strs[0] = Constant.RTK_CONN_STATUS_COLUMN;
|
conn_strs[1] = json;
|
//RTK平台连接状态
|
Data connStatusData = new Data.Builder().putStringArray(Constant.APP_STATUS,conn_strs).build();
|
OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(AppStatusWorker.class).setInputData(connStatusData).build();
|
WorkManager.getInstance(getApplicationContext()).enqueue(oneTimeWorkRequest);
|
break;
|
case Constant.FETCH_MAP_INFO:
|
// sendMapInfo();
|
|
break;
|
case Constant.REQ_VECHILE_PROFILE:
|
DataInitKt.sendVehicleInfo();
|
break;
|
case Constant.GPS_INFO:
|
Data gpsData = new Data.Builder().putString(Constant.GPS_INFO_DATA,json).build();
|
OneTimeWorkRequest gpsinfoWorkRequest = new OneTimeWorkRequest.Builder(GpsInfoWorker.class).setInputData(gpsData).build();
|
WorkManager.getInstance(getApplicationContext()).enqueue(gpsinfoWorkRequest);
|
break;
|
case Constant.ENTER_OR_EXIT_ITEM:
|
|
try {
|
JSONObject rtkConfigUpdtea = new JSONObject(json);
|
type = rtkConfigUpdtea.getInt("type");
|
enter_status = rtkConfigUpdtea.getInt("enter");
|
mapId = rtkConfigUpdtea.getInt("map_id");
|
|
String itemstr=ExamPlatformData.getInstance().getItemStatusStr(type);
|
MyLog.i(PlatFormConstant.LUKAO,String.format("%s",itemstr+(enter_status==Constant.EXIT_CURRENT_ITEM?"结束":"开始")));
|
if (ExamPlatformData.getInstance().getTrainingMode()== ExamPlatformData.TRAINING_MODE){
|
if (ExamPlatformData.getInstance().getExamType()>ExamPlatformData.EXAM_TYPE_ChangKAO){
|
MyLog.i("路考不报项目开始结束语音");
|
}else{
|
|
ExamPlatformData.getInstance().getTTS().speak(itemstr+(enter_status==Constant.EXIT_CURRENT_ITEM?"结束":"开始"));
|
}
|
|
}else{
|
if (enter_status!=Constant.EXIT_CURRENT_ITEM){
|
if (ExamPlatformData.getInstance().getExamType()>ExamPlatformData.EXAM_TYPE_ChangKAO){
|
MyLog.i("路考不报项目开始结束语音");
|
}else{
|
|
ExamPlatformData.getInstance().getTTS().speak(itemstr+"开始");
|
}
|
|
}
|
|
}
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
|
|
CThreadPoolExecutor.runInBackground(new Runnable() {
|
@Override
|
public void run() {
|
ExamStatus examStatus = new ExamStatus();
|
examStatus.setEnter(enter_status);
|
examStatus.setMap_id(mapId);
|
examStatus.setMap_item(type);
|
WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getExamStatusDao().insert(examStatus);
|
CEventCenter.dispatchEvent(Constant.BIND_EXAM_STATUS_TOPIC,cmd,0,examStatus);
|
}
|
});
|
// Data exam_enter_exitdata = new Data.Builder().putString(Constant.exam_enter_exitdata,json).build();
|
// OneTimeWorkRequest examStatusWorker = new OneTimeWorkRequest.Builder(ExamStatusWoker.class).setInputData(exam_enter_exitdata).build();
|
// WorkManager.getInstance(getApplicationContext()).enqueue(examStatusWorker);
|
break;
|
case Constant.REAL_TIME_CAR_POS:
|
try {
|
JSONObject jsSpeed = new JSONObject(json);
|
double speed = jsSpeed.getDouble("speed");
|
CEventCenter.dispatchEvent(Constant.BIND_SPEED_TOPIC,cmd,0,speed);
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
CEventCenter.dispatchEvent(Constant.REAL_TIME_POS_CAR_TOPIC,cmd,0,json);
|
break;
|
case Constant.DEBUG_RTCM:
|
CEventCenter.dispatchEvent(Constant.BIND_RTCM_TOPIC,cmd,0,json);
|
break;
|
case Constant.DEBUG_TXT:
|
CEventCenter.dispatchEvent(Constant.BIND_DEBUG_TXT,cmd,0,json);
|
break;
|
case Constant.MCU_SN:
|
String sn = null;
|
try {
|
JSONObject rtkConfigUpdtea = new JSONObject(json);
|
sn = rtkConfigUpdtea.getString("sn");
|
// sn = rtkConfigUpdtea.put(safeluck.drive.evaluation.DB.Constant.RTK_CONFIG_SN,sn).toString();
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
if (sn.equalsIgnoreCase(lastSn)){
|
|
}else{
|
if (TextUtils.isEmpty(lastSn)){
|
lastSn ="123";
|
return;
|
}
|
lastSn = sn;
|
ExamPlatformData.getInstance().setMcuSN(sn);
|
Data data = new Data.Builder().putString(safeluck.drive.evaluation.DB.Constant.RTK_CONFIG_UPDATE_JSON,sn).build();
|
OneTimeWorkRequest rtkConfigUpdateWorker= new OneTimeWorkRequest.Builder(RTKConfigUpdateWorker.class).build();
|
WorkManager.getInstance(getAppContext()).enqueue(rtkConfigUpdateWorker);
|
}
|
CEventCenter.dispatchEvent(Constant.BIND_MCUINFO_TOPIC,cmd,0,json);
|
break;
|
case Constant.RTK_MODLUE_STATUS:
|
ExamPlatformData.getInstance().setRTKModuleInfo(json);
|
break;
|
case Constant.IC_ID:
|
|
CEventCenter.dispatchEvent(Constant.BIND_SPEED_TOPIC,cmd,0,json);
|
break;
|
case Constant.RTK_INFO:
|
JSONObject jsonObject = null;
|
String utc=null;
|
try {
|
jsonObject = new JSONObject(json);
|
int qf = jsonObject.getInt("qf");
|
int satNum = jsonObject.getInt("sat_num");
|
|
//需要将utc时间取出来,然后+8个小时为北京时间,再修改json字符串,然后发给服务器
|
utc = jsonObject.getString("utc");
|
//移动站服务给的是.40 的话 代表是400毫秒
|
utc=Utils.utc2NetWorkTimeMillSeconds(utc+"0");
|
|
if (lastSatEqualNow(satNum)&&lastQfEqualNow(qf)){
|
}else{
|
ExamPlatformData.getInstance().setQfAndSatNum(qf,satNum);
|
}
|
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
|
CEventCenter.dispatchEvent(Constant.BIND_RTK_INFO_MAP,cmd,0,json);
|
|
|
if (ExamPlatformData.getInstance().getExamplatformStatus()==ExamPlatformData.DEV_LOGIN){
|
try {
|
JSONObject jsSpeed = new JSONObject(json);
|
double speed = jsSpeed.getDouble("speed");
|
CEventCenter.dispatchEvent(Constant.BIND_RTK_SPEED_TOPIC,cmd,0,speed);
|
JKMessage0206 jkMessage0206 = new JKMessage0206();
|
jkMessage0206.alert = 0;
|
jkMessage0206.status = 0;
|
|
|
|
utc = utc.substring(0,utc.length()-1);
|
json=json.replaceFirst("[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*",utc);
|
jkMessage0206.json =json;
|
jkMessage0206.length = jkMessage0206.json.length();
|
AttachInfo attachInfo = new AttachInfo();
|
AttachInfo2 attachInfo2 = new AttachInfo2();
|
attachInfo.attach_message_id = 0x41;
|
|
attachInfo.attach_data = ExamPlatformData.getInstance().getExam_id();
|
jkMessage0206.attachInfo = attachInfo;
|
|
|
attachInfo2.attach_message_id = 0x42;
|
if (ExamPlatformData.getInstance().getExamType()>ExamPlatformData.EXAM_TYPE_ChangKAO){
|
|
attachInfo2.attach_data =1;
|
}else{
|
|
attachInfo2.attach_data = 0;
|
}
|
|
jkMessage0206.attachInfo2 = attachInfo2;
|
if (ExamPlatformData.getInstance().getTrainingMode()==ExamPlatformData.MODE_NONE||ExamPlatformData.getInstance().getTrainingMode()==ExamPlatformData.ROUTE_MODE){
|
//判断10s时间是否到
|
if (ExamPlatformData.getInstance().isTimeArrive_10s()){
|
|
//到了 就走下面发送0206消息
|
MessageProcessor.getInstance().sendMessage(jkMessage0206);
|
//重置标记
|
ExamPlatformData.getInstance().setTimeArrive_10s(false);
|
}else{
|
//没到,就不走下面 不发送0206,直接return
|
return;
|
}
|
|
|
}else{
|
MessageProcessor.getInstance().sendMessage(jkMessage0206);
|
}
|
|
|
|
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
|
}else{
|
|
String str = "登录未成功,不能发送消息=0206";
|
if (str.equalsIgnoreCase(last0206Str)){
|
|
}else{
|
last0206Str = str;
|
MyLog.i(PlatFormConstant.TAG,str);
|
}
|
}
|
|
break;
|
case Constant.LEFT_RIGHT_DISTANCE:
|
CEventCenter.dispatchEvent(Constant.BIND_RTK_SPEED_TOPIC,cmd,0,json);
|
break;
|
case Constant.ID_SM_CARSENSOR:
|
Log.i("InspectSignal",json);
|
CEventCenter.dispatchEvent(Constant.BIND_MCUINFO_TOPIC,cmd,0,json);
|
break;
|
case Constant.ENTER_OR_EXIT_ROAD_ID:
|
case Constant.ENTER_OR_EXIT_ROADCROSS_ID:
|
CEventCenter.dispatchEvent(Constant.BIND_ROUTE_COLLECT_TOPIC,cmd,0,json);
|
break;
|
case Constant. ID_SM_CAN_BRIEF:
|
ExamPlatformData.getInstance().setSM_CAN_BRIEF(json);
|
break;
|
}
|
|
}
|
|
@Override
|
public void bindStatus(int code) {
|
MyLog.i(String.format("bindStatus = %d",code));
|
if (code == 0){
|
ExamPlatformData.getInstance().getTTS().speak("服务绑定成功");
|
initData();
|
}else{
|
ExamPlatformData.getInstance().getTTS().speak("服务异常死亡");
|
MyLog.i("服务异常死亡监听到之后,重置发送标志,然后发送数据");
|
AbsInitialData.getInstance().resethasSendInitData();
|
AbsInitialData.getInstance().sendInitialData();
|
}
|
|
|
}
|
|
private String last0206Str="";
|
private int lastSatNum= -1;
|
private int lastQf = -1;
|
|
private boolean lastSatEqualNow(int satNum) {
|
if (lastSatNum == satNum){
|
return true;
|
}else{
|
lastSatNum = satNum;
|
}
|
return false;
|
}
|
private boolean lastQfEqualNow(int qf) {
|
if (lastQf == qf){
|
return true;
|
}else{
|
lastQf = qf;
|
}
|
return false;
|
}
|
|
|
|
}
|