diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index 893c53223d..0651537b66 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -11,14 +11,27 @@ import androidx.lifecycle.Lifecycle.Event import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.module.status.IMogoStatusChangedListener +import com.mogo.commons.module.status.MogoStatusManager +import com.mogo.commons.module.status.StatusDescriptor import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.deva.report.ReportEntity +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.data.msgbox.FMInfoMsg import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType +import com.mogo.eagle.core.data.msgbox.MsgCategory import com.mogo.eagle.core.data.msgbox.RecordBagMsg import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener +import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -32,8 +45,11 @@ import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPi import com.zhjt.mogo_core_function_devatools.ext.enqueuePop import me.jessyan.autosize.utils.AutoSizeUtils import record_cache.RecordPanelOuterClass +import kotlin.math.abs -internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener { +internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener, + IMoGoChassisLocationGCJ02Listener, IMsgBoxListener, IMoGoDevaToolsListener, + IMogoStatusChangedListener { const val TAG = "BadCase" @@ -45,6 +61,14 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis fun init(context: Context) { CallerAutopilotRecordListenerManager.addListener(TAG, this) SpeechUtils.init(context) + //定位监听, 传false是高德坐标系 + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 1, this) + //消息盒子监听,获取FM和Report信息 + CallerMsgBoxListenerManager.addListener(TAG,this) + CallerDevaToolsListenerManager.addListener(TAG, this) + // 云socket连接状态 + MogoStatusManager.getInstance() + .registerStatusChangedListener(TAG, StatusDescriptor.CLOUD_SOCKET, this) } /** @@ -302,4 +326,36 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis } + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + mogoLocation?.let { + BadCaseConfig.currentSpeed = (abs(it.gnssSpeed) * 3.6f).toInt() + } + } + + override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) { + if(category == MsgCategory.SYS_INFO){ + //上报 + BadCaseConfig.newReportEntity = msgBoxList.bean as ReportEntity + }else if(category == MsgCategory.FM_INFO){ + //FM + BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg + } + + } + + override fun gpsStatus(status: Boolean) { + super.gpsStatus(status) + BadCaseConfig.gpsStatus = "GPS${if (status) "正常" else "异常"}" + } + + override fun tracingStatus(status: Boolean) { + super.tracingStatus(status) + BadCaseConfig.tracingStatus = "寻迹算路${if (status) "正常" else "异常"}" + } + + override fun onStatusChanged(descriptor: StatusDescriptor?, isTrue: Boolean) { + BadCaseConfig.socketStatus = "云Socket连接${if (isTrue) "正常" else "异常"}" + } + + } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt index e25cb093a9..9c9681fc45 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt @@ -35,6 +35,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener import com.mogo.eagle.core.function.api.map.deva.IMoGoMapScreenListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84 import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager @@ -645,6 +646,23 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList * 高精地图截图回调 */ override fun onMapScreen(bitmap: Bitmap) { + //在截图上保存即时信息 + val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" + val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}" + val state = when(CallerAutoPilotStatusListenerManager.getState()){ + 0->"自驾状态:不可自驾" + 1->"自驾状态:可自驾" + 2->"自驾状态:自驾中" + 7->"自驾状态:平行驾驶中" + else->"自驾状态:未知" + } + val speed = "当前车速:${BadCaseConfig.currentSpeed}" + + + val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed, + BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus + ,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity) + //图片保存本地 val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+ @@ -654,7 +672,12 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList if (!File(fileDir).exists()) { File(fileDir).mkdirs() } - RecordBitmapUtils.bitmap2Path(bitmap,path) + if(outBitmap != null){ + RecordBitmapUtils.bitmap2Path(outBitmap,path) + }else{ + RecordBitmapUtils.bitmap2Path(bitmap,path) + } + //遍历是否有非当日的文件并删除 RecordBitmapUtils.deleteExpiredFile(currentDay) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt index b6ee0d1047..26f9fc5f96 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt @@ -1,6 +1,8 @@ package com.zhjt.mogo_core_function_devatools.badcase.consts import com.mogo.eagle.core.data.deva.badcase.BagInfoEntity +import com.mogo.eagle.core.data.deva.report.ReportEntity +import com.mogo.eagle.core.data.msgbox.FMInfoMsg /** * @author XuXinChao @@ -29,6 +31,23 @@ object BadCaseConfig { //工控机版本 @JvmField var dockerVersion:String ?= null + //当前车速 + @JvmField + var currentSpeed: Int = 0 + //最新的上报消息 + @JvmField + var newReportEntity: ReportEntity ?= null + //最新的FM消息 + @JvmField + var newFMInfoMsg: FMInfoMsg ?= null + //GPS状态 + @JvmField + var gpsStatus: String ?= null + //寻迹算路 + @JvmField + var tracingStatus: String ?= null + //云Socket连接状态 + var socketStatus: String ?= null @JvmField var recordKeyList:ArrayList = ArrayList() //自定义Topic清单列表 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt index 6f2d1e8fa1..5ee8056017 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt @@ -6,6 +6,10 @@ import android.graphics.Color import android.graphics.Paint import android.os.Environment import android.util.Log +import com.mogo.eagle.core.data.deva.report.ReportEntity +import com.mogo.eagle.core.data.msgbox.FMInfoMsg +import com.mogo.eagle.core.data.msgbox.MsgFmData +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.zhjt.mogo_core_function_devatools.badcase.biz.InitiativeBadCaseWindow import java.io.File import java.io.FileOutputStream @@ -19,7 +23,7 @@ object RecordBitmapUtils { fun bitmap2Path(bitmap: Bitmap, path: String?): String? { try { val os: OutputStream = FileOutputStream(path) - bitmap.compress(Bitmap.CompressFormat.PNG, 100, os) + bitmap.compress(Bitmap.CompressFormat.PNG, 80, os) os.flush() os.close() } catch (e: java.lang.Exception) { @@ -49,14 +53,64 @@ object RecordBitmapUtils { /** * 在指定Bitmap中绘制文字 */ - fun drawTextOnBitmap(bitmap: Bitmap, text: String?, x: Int, y: Int): Bitmap? { + fun drawTextOnBitmap(bitmap: Bitmap, time: String,lineId: String,state: String,currentSpeed: String + ,gpsStatus: String?,tracingStatus: String?,socketStatus: String? + ,fm: FMInfoMsg?,report: ReportEntity? + ): Bitmap? { val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) val canvas = Canvas(mutableBitmap) val paint = Paint() paint.color = Color.RED - paint.textSize = 100f + paint.textSize = 50f paint.isAntiAlias = true - canvas.drawText(text!!, x.toFloat(), y.toFloat(), paint) + canvas.drawText(time, 100f, 100f, paint) + canvas.drawText(lineId,100f,200f,paint) + canvas.drawText(state,100f,300f,paint) + canvas.drawText(currentSpeed,100f,400f,paint) + + gpsStatus?.let { + canvas.drawText(it,1000f,100f,paint) + } + tracingStatus?.let { + canvas.drawText(it,1000f,200f,paint) + } + socketStatus?.let { + canvas.drawText(it,1000f,300f,paint) + } + + fm?.let { + canvas.drawText("FM:${MsgFmData.getFmPolicyName(it.policyCode)}",100f,600f,paint) + canvas.drawText("故障策略:${MsgFmData.getFmPolicyName(it.policyCode)}(${it.policyCode})",100f,700f,paint) + //故障原因 + if(it.fmInfoList.isNullOrEmpty()){ + canvas.drawText("故障原因:暂无",100f,800f,paint) + }else{ + val fmFaultReason = StringBuilder() + fmFaultReason.append("故障原因:") + for((index,info) in it.fmInfoList!!.withIndex()){ + fmFaultReason.append(info.faultName) + if(info.faultId.isNotBlank()){ + fmFaultReason.append("(") + fmFaultReason.append(info.faultId) + fmFaultReason.append(")") + } + if(index!=(it.fmInfoList!!.size-1)){ + fmFaultReason.append("/") + } + } + canvas.drawText(fmFaultReason.toString(),100f,800f,paint) + } + } + report?.let { + var resultStr = "上报类型:" + for (result in it.resultList) { + resultStr = + "${resultStr}${CallerAutoPilotControlManager.getReportResultDesc(result)}" + } + canvas.drawText(resultStr,100f,1000f,paint) + canvas.drawText("原因:${it.msg}",100f,1100f,paint) + canvas.drawText("消息来源:${it.src}",100f,1200f,paint) + } return mutableBitmap } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt index 1c4e6a7a75..905b83cff0 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt @@ -19,8 +19,6 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.msgbox.MsgBoxConfig -import com.mogo.eagle.core.function.msgbox.MsgFmData import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform import com.mogo.eagle.core.utilcode.util.TimeUtils diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index 9abf8fd4d3..b35f490ca8 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -18,7 +18,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.msgbox.MsgFmData import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/msgbox/MsgFmData.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/MsgFmData.kt similarity index 99% rename from core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/msgbox/MsgFmData.kt rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/MsgFmData.kt index 064484cc27..32297c55cc 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/msgbox/MsgFmData.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/MsgFmData.kt @@ -1,6 +1,4 @@ -package com.mogo.eagle.core.function.msgbox - -import com.zhjt.mogo.adas.data.bean.MogoReport +package com.mogo.eagle.core.data.msgbox /** * FM信息对照表