From 9782bd0045bf0fc128933701c6b7e6a65f101659 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 7 Dec 2023 20:33:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[6.2.4]=E5=A2=9E=E5=8A=A0=E9=87=87=E9=9B=86?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E3=80=81=E9=95=BF=E4=B9=85=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/BadCaseManager.kt | 5 +- .../badcase/biz/AIDataCollectWindow.kt | 4 +- .../badcase/biz/BadCaseManagerView.kt | 4 ++ .../badcase/biz/InitiativeBadCaseWindow.kt | 5 +- .../biz/adapter/BagManagerListAdapter.kt | 25 +++++++-- .../badcase/consts/BadCaseConfig.kt | 52 ++++++++++++++++--- 6 files changed, 83 insertions(+), 12 deletions(-) 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 0651537b66..4c3ffe9e2e 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 @@ -272,8 +272,11 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis ) } bag录制失败" ) + //获取录包失败集合 + val recordFail = BadCaseConfig.getRecordFailSet() //录包失败时,保存录包失败状态 - BadCaseConfig.bagRecordFailList.add(recordPanel.key) + recordFail.add(recordPanel.key.toString()) + BadCaseConfig.setRecordFailSet(recordFail) } return } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt index 322f0f9d63..11891d2e42 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt @@ -201,8 +201,10 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener //开始录制 if(recordPanel.stat == 300){ BadCaseConfig.recordKeyList.add(recordPanel.key) + val aiDataSet = BadCaseConfig.getAiDataSet() //保存录包状态 - BadCaseConfig.bagResourceList.add(recordPanel.key) + aiDataSet.add(recordPanel.key.toString()) + BadCaseConfig.setAiDataSet(aiDataSet) } if (recordFileName == null) { recordFileName = recordPanel.filename diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index de4836a97d..ae9c652dfa 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -27,6 +27,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.zhidao.loglib.download.DownloadManager import com.zhjt.mogo_core_function_devatools.R import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.BagManagerListAdapter +import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig.bagManagerList import com.zhjt.mogo_core_function_devatools.badcase.record.Audition import kotlinx.android.synthetic.main.layout_badcase_manager.view.* @@ -237,6 +238,9 @@ class BadCaseManagerView @JvmOverloads constructor( val linearLayoutManager = LinearLayoutManager(context) rvBagList.layoutManager = linearLayoutManager rvBagList.adapter = bagManagerListAdapter + bagManagerListAdapter?.setRecordSet(BadCaseConfig.getInitiativeRecordSet(), + BadCaseConfig.getAiDataSet(),BadCaseConfig.getRecordFailSet()) + //音频文件播放 // Audition.getInstance().playOrStop("/mnt/sdcard/mogo/test.wav") 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 e803341c6e..7371773efb 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 @@ -574,8 +574,11 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList //开始录制 if(recordPanel.stat == 300){ BadCaseConfig.recordKeyList.add(recordPanel.key) + //获取当前主动录包集合 + val recordSet = BadCaseConfig.getInitiativeRecordSet() //保存录包状态 - BadCaseConfig.bagResourceList.add(recordPanel.key) + recordSet.add(recordPanel.key.toString()) + BadCaseConfig.setInitiativeRecordSet(recordSet) //开启高精地图截图 CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt index 72d4174393..8c8d421184 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -32,11 +32,24 @@ class BagManagerListAdapter: RecyclerView.Adapter() { private var bagClickListener: BagClickListener ?= null private val format = DecimalFormat("0.00") + private var initiativeSet: HashSet ?= null //录包来源为主动录包集合 + private var aiDataSet: HashSet ?= null //录包来源为AI数据采集集合 + private var recordFailSet: HashSet ?= null //录包失败集合 + fun setData(data: List?){ this.data = data notifyDataSetChanged() } + /** + * 设置录包缓存信息 + */ + fun setRecordSet(initiative: HashSet,aiData: HashSet,recordFail: HashSet){ + initiativeSet = initiative + aiDataSet = aiData + recordFailSet = recordFail + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if(viewType == 1){ val view = LayoutInflater.from(parent.context) @@ -98,7 +111,7 @@ class BagManagerListAdapter: RecyclerView.Adapter() { bagInfoEntity.description?.let { des-> - if(BadCaseConfig.bagRecordFailList.contains(bagInfoEntity.key)){ + if(!recordFailSet.isNullOrEmpty() && recordFailSet!!.contains(bagInfoEntity.key.toString())){ //如果在录包失败列表中找到该Bag包,则该包为录包失败状态 holder.tvBagReportStatus.text = "录包失败" holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg) @@ -142,11 +155,17 @@ class BagManagerListAdapter: RecyclerView.Adapter() { } } - //录包来源:自动 or 人工 - if(BadCaseConfig.bagResourceList.contains(bagInfoEntity.key)){ + //录包来源:自动 or 人工 or 采集 + if(!initiativeSet.isNullOrEmpty() && initiativeSet!!.contains(bagInfoEntity.key.toString())){ //在该列表中找到Bag包的Key则代表该Bag为人工录包 holder.tvBagResource.text = "人工" holder.tvBagResource.setBackgroundResource(R.drawable.bag_artificial_button_bg) + }else if(!aiDataSet.isNullOrEmpty() && aiDataSet!!.contains(bagInfoEntity.key.toString())){ + //AI数据采集 + holder.tvBagResource.text = "采集" + holder.tvBagResource.setBackgroundResource(R.drawable.bag_artificial_button_bg) + //AI数据采集不显示截图播放按钮 + holder.ivMapScreen.visibility = View.INVISIBLE }else{ //自动录包 holder.tvBagResource.text = "自动" 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 26f9fc5f96..ec26cca0c7 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 @@ -3,6 +3,7 @@ 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 +import com.mogo.eagle.core.utilcode.util.SPUtils /** * @author XuXinChao @@ -56,11 +57,50 @@ object BadCaseConfig { //Bag包管理列表 @JvmField var bagManagerList: ArrayList = ArrayList() - //Bag包来源,将主动录包的Key保存在该列表中,不在该列表中的在录包管理页面的Bag包视为被动录包 - @JvmField - var bagResourceList: ArrayList = ArrayList() - //Bag包录包失败状态列表,当Bag录制失败时保存在该列表,当Bag包在该列表中不存在时即视为录包成功 - @JvmField - var bagRecordFailList: ArrayList = ArrayList() + private const val resourceInitiative = "RESOURCE_INITIATIVE" //录包来源为主动录包 + private const val resourceAiData = "RESOURCE_AI_DATA" //录包来源为AI数据采集 + private const val recordFail = "RECORD_FAIL" //录包失败 + + /** + * 获取主动录包集合 + */ + fun getInitiativeRecordSet(): HashSet{ + return SPUtils.getInstance().getStringSet(resourceInitiative,HashSet()) as HashSet + } + + /** + * 保存主动录包集合 + */ + fun setInitiativeRecordSet(initiativeSet: Set){ + SPUtils.getInstance().put(resourceInitiative,initiativeSet) + } + + /** + * 获取AI数据采集集合 + */ + fun getAiDataSet(): HashSet{ + return SPUtils.getInstance().getStringSet(resourceAiData,HashSet()) as HashSet + } + + /** + * 保存AI数据采集集合 + */ + fun setAiDataSet(aiDataSet: Set){ + SPUtils.getInstance().put(resourceAiData,aiDataSet) + } + + /** + * 获取录包失败集合 + */ + fun getRecordFailSet(): HashSet{ + return SPUtils.getInstance().getStringSet(recordFail,HashSet()) as HashSet + } + + /** + * 保存录包失败集合 + */ + fun setRecordFailSet(recordFailSet: Set){ + SPUtils.getInstance().put(recordFail,recordFailSet) + } } \ No newline at end of file From 8e43c8976007acae7daef4c5d60a24dfea0d763e Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 7 Dec 2023 21:05:23 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[6.2.4]AI=E6=95=B0=E6=8D=AE=E9=87=87?= =?UTF-8?q?=E9=9B=86=E4=BF=A1=E6=81=AF=E4=B8=8A=E6=8A=A5=E5=88=B0=E5=B7=A5?= =?UTF-8?q?=E6=8E=A7=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/AIDataCollectWindow.kt | 21 ++++++++++++++++--- .../core/data/deva/badcase/BagInfoEntity.kt | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt index 11891d2e42..5a653f02b9 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt @@ -12,6 +12,8 @@ import androidx.recyclerview.widget.RecyclerView import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.deva.badcase.AiDataEntity +import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity +import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity 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.call.autopilot.CallerAutoPilotControlManager @@ -67,11 +69,13 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener private var aiDataListAdapter: AiDataListAdapter?= null @Volatile - private var recordKey: String? = null //录制bag包key + private var recordKey: Long = 0 //录制bag包key @Volatile private var recordFileName: String? = null //录制文件包名 + private var bagManagerEntity: BagManagerEntity = BagManagerEntity() + private lateinit var mFloatLayout: View private var mInViewX = 0f private var mInViewY = 0f @@ -143,12 +147,15 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener ToastUtils.showShort("请选择最少一个原因") return@setOnClickListener } + //上报到工控机 + CallerAutoPilotControlManager.recordCause(recordKey.toString(),recordFileName,"", + collectReason.toString()) GlobalScope.launch { val uploadResult = presenter.upload(mutableMapOf().also { itx -> itx["carLicense"] = AppConfigInfo.plateNumber ?: "" //车牌号 itx["filename"] = recordFileName ?: "" //bag包文件地址 itx["filesize"] = "0" //bag包文件大小 - itx["key"] = recordKey ?: "" //key + itx["key"] = recordKey.toString() //key itx["reason"] = collectReason.toString() //采集原因 itx["duration"] = "20" //采集时长,固定为20S itx["startTime"] = System.currentTimeMillis().toString() //上报时间(时间戳格式) @@ -166,6 +173,14 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener TipToast.shortTip("上报失败") } else { TipToast.shortTip("上报成功") + //将上报BI的结果同步给工控机记录保存 + recordKey?.let { + val descReqEntity = BagDescriptionEntity(collectReason.toString(),false,"",true) + bagManagerEntity.reqType = 5 + bagManagerEntity.keyReq = it + bagManagerEntity.descReq = descReqEntity + CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity) + } BadCaseConfig.windowNum-- clickListener?.closeWindow() } @@ -197,7 +212,7 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) { CallerLogger.d("${M_DEVA}${TAG}", "-- 收到工控机录制任务回调 -- $recordPanel") ThreadUtils.runOnUiThread { - recordKey = recordPanel.key.toString() + recordKey = recordPanel.key //开始录制 if(recordPanel.stat == 300){ BadCaseConfig.recordKeyList.add(recordPanel.key) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/badcase/BagInfoEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/badcase/BagInfoEntity.kt index 143aec776a..d1123ae7dc 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/badcase/BagInfoEntity.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/badcase/BagInfoEntity.kt @@ -9,7 +9,7 @@ class BagInfoEntity(){ var key: Long = 0// bag key值 var totalSize: Long = 0// 所有子包或合并后的包的总大小 var timestamp: String = ""// 时间戳 - var bagPath: String ?= null// bag所在路径 + var bagPath: String = ""// bag所在路径 var mergeStat: Boolean = false// 合并状态 var uploadStat: Boolean = false// 上传cos桶状态 var description: BagDescriptionEntity?= null// 包描述信息 From 29033b21d92b3a7423a41c3b360ec4e0af8ecff6 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 7 Dec 2023 21:20:27 +0800 Subject: [PATCH 3/3] =?UTF-8?q?[6.2.4]=E9=9D=9ETaxi=E5=8F=B8=E6=9C=BA?= =?UTF-8?q?=E5=B1=8F=E4=B8=8D=E6=98=BE=E7=A4=BA=E6=97=A0=E4=BA=BA=E5=8C=96?= =?UTF-8?q?=E6=BC=94=E7=BB=83=E6=8B=89=E5=8F=96=E6=97=B6=E9=97=B4=E9=97=B4?= =?UTF-8?q?=E9=9A=94Title?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eagle/core/function/hmi/ui/setting/SOPSettingView.kt | 8 ++++++-- .../src/main/res/layout/view_sop_setting.xml | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt index b01319581d..2c888da2b4 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -2,7 +2,6 @@ package com.mogo.eagle.core.function.hmi.ui.setting import android.content.Context import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View import android.widget.Toast @@ -31,7 +30,6 @@ import com.mogo.eagle.core.function.call.setting.CallerSopSettingManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.hmi.ui.tools.DockerRebootDialog import com.mogo.eagle.core.function.hmi.ui.tools.SweeperModeChangedConfirmDialog import com.mogo.eagle.core.function.call.unmanned.CallerUnmannedListenerManager import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction @@ -84,6 +82,7 @@ import kotlinx.android.synthetic.main.view_sop_setting.view.scV2nPnc import kotlinx.android.synthetic.main.view_sop_setting.view.scWeakNetSlowDown import kotlinx.android.synthetic.main.view_sop_setting.view.sopLayout import kotlinx.android.synthetic.main.view_sop_setting.view.tvOverTakeLimit +import kotlinx.android.synthetic.main.view_sop_setting.view.tvPullTimeTitle import kotlinx.android.synthetic.main.view_sop_setting.view.tvSpeed import kotlinx.android.synthetic.main.view_sop_setting.view.tvSpeedOverTakeLimit import kotlinx.android.synthetic.main.view_sop_setting.view.tvSpeedThresholdTitle @@ -789,6 +788,11 @@ internal class SOPSettingView @JvmOverloads constructor( View.VISIBLE else View.GONE + tvPullTimeTitle.visibility = + if(AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode)) + View.VISIBLE + else + View.GONE /** * 魔方sop运营相关配置 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml index cad768784f..92488dd246 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -586,7 +586,7 @@ android:textColor="@color/black" android:textSize="32dp" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/scLineRoutingVerify" /> + app:layout_constraintTop_toBottomOf="@id/scShowBagRecordWindow" />