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..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,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 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 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" />