Merge branch 'dev_robotaxi-d_231206_6.2.4' into dev_sweeper-d_231206_6.2.4
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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 = "自动"
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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运营相关配置
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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// 包描述信息
|
||||
|
||||
Reference in New Issue
Block a user