Merge branch 'dev_robotaxi-d_231206_6.2.4' into dev_sweeper-d_231206_6.2.4

This commit is contained in:
xuxinchao
2023-12-07 21:20:56 +08:00
9 changed files with 109 additions and 19 deletions

View File

@@ -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
}

View File

@@ -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<String, String>().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,12 +212,14 @@ 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)
val aiDataSet = BadCaseConfig.getAiDataSet()
//保存录包状态
BadCaseConfig.bagResourceList.add(recordPanel.key)
aiDataSet.add(recordPanel.key.toString())
BadCaseConfig.setAiDataSet(aiDataSet)
}
if (recordFileName == null) {
recordFileName = recordPanel.filename

View File

@@ -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")

View File

@@ -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()
}

View File

@@ -32,11 +32,24 @@ class BagManagerListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var bagClickListener: BagClickListener ?= null
private val format = DecimalFormat("0.00")
private var initiativeSet: HashSet<String> ?= null //录包来源为主动录包集合
private var aiDataSet: HashSet<String> ?= null //录包来源为AI数据采集集合
private var recordFailSet: HashSet<String> ?= null //录包失败集合
fun setData(data: List<BagInfoEntity>?){
this.data = data
notifyDataSetChanged()
}
/**
* 设置录包缓存信息
*/
fun setRecordSet(initiative: HashSet<String>,aiData: HashSet<String>,recordFail: HashSet<String>){
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<RecyclerView.ViewHolder>() {
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<RecyclerView.ViewHolder>() {
}
}
//录包来源:自动 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 = "自动"

View File

@@ -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<BagInfoEntity> = ArrayList()
//Bag包来源将主动录包的Key保存在该列表中不在该列表中的在录包管理页面的Bag包视为被动录包
@JvmField
var bagResourceList: ArrayList<Long> = ArrayList()
//Bag包录包失败状态列表当Bag录制失败时保存在该列表当Bag包在该列表中不存在时即视为录包成功
@JvmField
var bagRecordFailList: ArrayList<Long> = ArrayList()
private const val resourceInitiative = "RESOURCE_INITIATIVE" //录包来源为主动录包
private const val resourceAiData = "RESOURCE_AI_DATA" //录包来源为AI数据采集
private const val recordFail = "RECORD_FAIL" //录包失败
/**
* 获取主动录包集合
*/
fun getInitiativeRecordSet(): HashSet<String>{
return SPUtils.getInstance().getStringSet(resourceInitiative,HashSet<String>()) as HashSet<String>
}
/**
* 保存主动录包集合
*/
fun setInitiativeRecordSet(initiativeSet: Set<String>){
SPUtils.getInstance().put(resourceInitiative,initiativeSet)
}
/**
* 获取AI数据采集集合
*/
fun getAiDataSet(): HashSet<String>{
return SPUtils.getInstance().getStringSet(resourceAiData,HashSet<String>()) as HashSet<String>
}
/**
* 保存AI数据采集集合
*/
fun setAiDataSet(aiDataSet: Set<String>){
SPUtils.getInstance().put(resourceAiData,aiDataSet)
}
/**
* 获取录包失败集合
*/
fun getRecordFailSet(): HashSet<String>{
return SPUtils.getInstance().getStringSet(recordFail,HashSet<String>()) as HashSet<String>
}
/**
* 保存录包失败集合
*/
fun setRecordFailSet(recordFailSet: Set<String>){
SPUtils.getInstance().put(recordFail,recordFailSet)
}
}

View File

@@ -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运营相关配置

View File

@@ -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" />
<RadioGroup
android:id="@+id/rgPullTime"

View File

@@ -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// 包描述信息