From 26446de9327feefaf77b46106c7220b07a6924f7 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 29 Aug 2024 14:50:54 +0800 Subject: [PATCH] =?UTF-8?q?[6.6.0]=E6=95=B0=E6=8D=AE=E9=97=AD=E7=8E=AF?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/takeover/RecordManager.kt | 11 +- .../takeover/TakeOverRecordProvider.kt | 3 +- .../core/function/takeover/db/RecordInfo.kt | 9 ++ .../badcase/BadCaseManager.kt | 10 +- .../badcase/consts/BadCaseConfig.kt | 2 + .../workorder/FaultReasonWindow.kt | 119 +++++++++++++----- .../workorder/ReportTypeWindow.kt | 43 ++++++- .../workorder/TakeOverReasonWindow.kt | 114 ++++++++++++++--- .../workorder/TakeOverRecordView.kt | 26 +++- .../workorder/WorkOrderApiService.kt | 24 +++- .../workorder/WorkOrderNetWorkModel.kt | 12 +- .../workorder/adapter/TakeOverListAdapter.kt | 11 +- .../src/main/res/layout/view_fault_reason.xml | 29 ++++- .../main/res/layout/view_take_over_reason.xml | 26 +++- .../data/deva/report/TakeOverRecordInfo.kt | 4 + 15 files changed, 367 insertions(+), 76 deletions(-) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt index dda5cea3db..225d4d9c16 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/RecordManager.kt @@ -27,8 +27,9 @@ object RecordManager { */ fun insertRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){ takeOverRecordInfo.let { - val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id, - it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus) + val recordInfo = RecordInfo(it.faultStartTime,it.address, + it.level1Id,it.level1Name, it.level2Id,it.level2Name, + it.level3Id,it.level3Name,it.lineName,it.reportNote,it.reportStatus) if (Thread.currentThread() == Looper.getMainLooper().thread){ scope.launch{ withContext(Dispatchers.IO){ @@ -60,7 +61,8 @@ object RecordManager { fun updateRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){ takeOverRecordInfo.let{ val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id, - it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus) + it.level1Name, it.level2Id,it.level2Name,it.level3Id,it.level3Name, + it.lineName,it.reportNote,it.reportStatus) if (Thread.currentThread() == Looper.getMainLooper().thread){ scope.launch{ withContext(Dispatchers.IO){ @@ -92,7 +94,8 @@ object RecordManager { fun deleteRecord(context: Context, takeOverRecordInfo: TakeOverRecordInfo) { takeOverRecordInfo.let{ val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id, - it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus) + it.level1Name, it.level2Id,it.level2Name,it.level3Id,it.level3Name, + it.lineName,it.reportNote,it.reportStatus) if (Thread.currentThread() == Looper.getMainLooper().thread){ scope.launch { withContext(Dispatchers.IO) { diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/TakeOverRecordProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/TakeOverRecordProvider.kt index 5e98f90e23..868902f2d4 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/TakeOverRecordProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/TakeOverRecordProvider.kt @@ -43,7 +43,8 @@ class TakeOverRecordProvider: ITakeOverProvider { list.forEach { recordInfoList.add( TakeOverRecordInfo(it.faultStartTime,it.address,it.level1Id, - it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus,false) + it.level2Id,it.level3Id,it.level1Name,it.level2Name,it.level3Name, + it.lineName,it.reportNote,it.reportStatus,false) ) } return recordInfoList diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/db/RecordInfo.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/db/RecordInfo.kt index a1a9c29ccf..202143510b 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/db/RecordInfo.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/takeover/db/RecordInfo.kt @@ -18,12 +18,21 @@ data class RecordInfo( //一级分类ID @ColumnInfo var level1Id: Int, + //一级分类名称 + @ColumnInfo + var level1Name: String, //二级分类ID @ColumnInfo var level2Id: Int, + //二级分类名称 + @ColumnInfo + var level2Name: String, //三级分类ID @ColumnInfo var level3Id: Int, + //三级分类名称 + @ColumnInfo + var level3Name: String, //行驶路线 @ColumnInfo val lineName: String, 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 8af21bd591..d08eb0cbea 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 @@ -109,7 +109,9 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis private var level1Id: Int = 0 //一级分类ID private var level2Id: Int = 0 //二级分类ID private var level3Id: Int = 0 //三级分类ID - private var lineName: String = "" //行驶路线 + private var level1Name: String = "" + private var level2Name: String = "" + private var level3Name: String = "" private var reportNote: String = "" //上报描述 @@ -655,7 +657,9 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis address = it } val takeOverRecordInfo = TakeOverRecordInfo(System.currentTimeMillis(), - address,level1Id,level2Id,level3Id,lineName,reportNote, + address,level1Id,level2Id,level3Id, + level1Name, level2Name, level3Name, + BadCaseConfig.lineName,reportNote, reportStatus = false, selectStatus = false ) @@ -675,7 +679,7 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis } override fun onOrderLineUpdate(lineName: String) { - this.lineName = lineName + BadCaseConfig.lineName = lineName } /** 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 63cac39e6f..f9229805b4 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 @@ -66,6 +66,8 @@ object BadCaseConfig { @JvmField var tenantId: Long = 0 + var lineName: String = "" //行驶路线 + private const val resourceInitiative = "RESOURCE_INITIATIVE" //录包来源为主动录包 private const val resourceAiData = "RESOURCE_AI_DATA" //录包来源为AI数据采集 private const val recordFail = "RECORD_FAIL" //录包失败 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/FaultReasonWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/FaultReasonWindow.kt index cb38dca66c..85827be6ca 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/FaultReasonWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/FaultReasonWindow.kt @@ -99,6 +99,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, private lateinit var tvFaultTime: TextView private lateinit var tbFaultType: ToggleButton private lateinit var tbFaultReason: ToggleButton + private lateinit var viewFaultReason: View + private lateinit var ivFaultReason: ImageView private lateinit var ivTimeReduce: ImageView private lateinit var tvOccurrenceTime: TextView private lateinit var ivTimeAdd: ImageView @@ -117,11 +119,17 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, private var level1Id: Int = 0 //一级分类ID private var level2Id: Int = 0 //二级分类ID private var level3Id: Int = 0 //三级分类ID - private var lineName: String = "" //行驶路线 + private var level1Name: String = "" + private var level2Name: String = "" + private var level3Name: String = "" private var reportNote: String = "" //上报描述 - private val reportType: Int = 2 //上报方式:0:小程序 1:司机屏 2:云端上报 + private val reportType: Int = 1 //上报方式:0:小程序 1:司机屏 2:云端上报 - private var source: Int = 0 //操作源,0:类型;1:原因 + private var source: Int = 0 //操作源,0:默认,一级分类 1:类型,二级分类;2:原因,三级分类 + private var hasLevel3: Boolean = false //是否有三级分类 + + private var typeList: List ?= null //故障类型列表 + private var reasonList: List ?= null //故障原因列表 init { initFloatWindow() @@ -154,6 +162,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, tvFaultTime = mFloatLayout.findViewById(R.id.tvFaultTime) tbFaultType = mFloatLayout.findViewById(R.id.tbFaultType) tbFaultReason = mFloatLayout.findViewById(R.id.tbFaultReason) + viewFaultReason = mFloatLayout.findViewById(R.id.viewFaultReason) + ivFaultReason = mFloatLayout.findViewById(R.id.ivFaultReason) ivTimeReduce = mFloatLayout.findViewById(R.id.ivTimeReduce) tvOccurrenceTime = mFloatLayout.findViewById(R.id.tvOccurrenceTime) ivTimeAdd = mFloatLayout.findViewById(R.id.ivTimeAdd) @@ -170,16 +180,34 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, orderReasonAdapter = OrderReasonAdapter() orderReasonAdapter.setListener(object: OrderReasonAdapter.ReasonSelectListener{ override fun onSelectReason(reason: CategoryInfo, mSource: Int) { - if(mSource == 0){ + if(mSource == 1){ //类型 tbFaultType.textOn = reason.name tbFaultType.textOff = reason.name + //选择了故障类型 + tbFaultReason.visibility = View.VISIBLE + viewFaultReason.visibility = View.GONE + ivFaultReason.visibility = View.GONE tbFaultType.performClick() + if(level2Id != 0 && level2Id == reason.id){ + //故障类型选择没有变化 + reasonList?.let { orderReasonAdapter.setData(it,2) } + }else{ + level2Id = reason.id + level2Name = reason.name + tbFaultReason.textOn = "" + tbFaultReason.textOff = "" + source = 2 + //获取故障三级分类即故障原因 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,level2Id,1,0) + } }else{ //原因 tbFaultReason.textOn = reason.name tbFaultReason.textOff = reason.name tbFaultReason.performClick() + level3Id = reason.id + level3Name = reason.name } } }) @@ -194,6 +222,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight) val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract) iconUp?.setBounds(0, 0, iconUp.minimumWidth, iconUp.minimumHeight) + //获取一级分类 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,1,0,1,0) //弹窗展示时间 tvFaultTime.text = mActivity.resources.getString(R.string.take_over_time) + millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat()) @@ -205,22 +235,26 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, rvFaultList.visibility = View.VISIBLE (rvFaultList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbFaultType tbFaultReason.visibility = View.INVISIBLE - -// val list = ArrayList() -// list.add("一级分类1") -// orderReasonAdapter.setData(list,0) - - source = 0 - //获取故障二级分类即故障类型 - CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,1,1,0) + source = 1 + if(typeList.isNullOrEmpty()){ + //获取故障二级分类即故障类型 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,1,0) + }else{ + orderReasonAdapter.setData(typeList!!,source) + } } else { buttonView.setCompoundDrawables(null, null, iconDown, null) //隐藏列表 rvFaultList.visibility = View.GONE - tbFaultReason.visibility = View.VISIBLE } } + viewFaultReason.setOnClickListener { + ToastUtils.showShort("请先选择故障类型") + } + ivFaultReason.setOnClickListener { + ToastUtils.showShort("请先选择故障类型") + } //故障原因选择 tbFaultReason.setOnCheckedChangeListener { buttonView, isChecked -> if (isChecked) { @@ -228,16 +262,6 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, //展示列表 rvFaultList.visibility = View.VISIBLE (rvFaultList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbFaultReason - -// val list = ArrayList() -// list.add("二级分类1") -// orderReasonAdapter.setData(list,1) - - source = 1 - //获取故障三级分类即故障原因 - CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,1,1,0) - - } else { buttonView.setCompoundDrawables(null, null, iconDown, null) //隐藏列表 @@ -299,6 +323,14 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, } //上报 tvFaultReport.setOnClickListener{ + if(level2Name.isEmpty()){ + ToastUtils.showShort("请完整填写再上报") + return@setOnClickListener + } + if(hasLevel3 && level3Name.isEmpty()){ + ToastUtils.showShort("请完整填写再上报") + return@setOnClickListener + } //故障码列表赋值 BadCaseConfig.newFMInfoMsg?.fmInfoList?.forEach { faultCodeList.add(it.faultId) @@ -310,8 +342,13 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, address = it } val padProblemList= ArrayList() + val note = if(reportNote.isEmpty()){ + "$level1Name-$level2Name-$level3Name" + }else{ + "$level1Name-$level2Name-$level3Name($reportNote)" + } val padProblemInfo = PadProblemInfo(address,faultCodeList,millis2String(workOrderOccurrenceTime),level1Id, - level2Id,level3Id,lineName,reportNote,reportType, + level2Id,level3Id,BadCaseConfig.lineName,note,reportType, SharedPrefsMgr.getInstance().getString("och_account","")) padProblemList.add(padProblemInfo) val padAddProblemReq = PadAddProblemReq(padProblemList,AppConfigInfo.plateNumber) @@ -507,6 +544,7 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, rvFaultList.visibility = View.GONE tvUploadSuccess.visibility = View.VISIBLE faultReasonGroup.visibility = View.GONE + tbFaultReason.visibility = View.GONE val successHandler = Handler(Looper.getMainLooper()) successHandler.postDelayed({ hideFloatWindow() @@ -523,21 +561,34 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, super.getCategoriesSuccess(list) ThreadUtils.runOnUiThread { if(list.isNotEmpty()){ - orderReasonAdapter.setData(list,source) + if(source == 0){ + level1Id = list[0].id + level1Name = list[0].name + + source = 1 + //获取故障二级分类即故障类型 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,1,0) + }else{ + if(source == 1){ + typeList = list + }else{ + reasonList = list + hasLevel3 = true + } + orderReasonAdapter.setData(list,source) + } + }else{ + if(source == 2){ + hasLevel3 = false + }else{ + ToastUtils.showShort("故障类型列表为空") + } } } } override fun getCategoriesError(msg: String) { super.getCategoriesError(msg) + ToastUtils.showShort("故障列表获取失败:$msg") } - - /** - * 订单路线名称变化监听 - * @param lineName 路线名称 - */ - override fun onOrderLineUpdate(lineName: String) { - this.lineName = lineName - } - } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt index fe3a63ebe7..6319683057 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt @@ -74,9 +74,15 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener { private var level1Id: Int = 0 //一级分类ID private var level2Id: Int = 0 //二级分类ID private var level3Id: Int = 0 //三级分类ID + private var level1Name: String = "" + private var level2Name: String = "" + private var level3Name: String = "" private var lineName: String = "" //行驶路线 private var reportNote: String = "" //上报描述 - private val reportType: Int = 2 //上报方式:0:小程序 1:司机屏 2:云端上报 + private val reportType: Int = 1 //上报方式:0:小程序 1:司机屏 2:云端上报 + private var level: Int = 1 + + private var canOneReport: Boolean = false //是否可以一键上报 init { initFloatWindow() @@ -118,6 +124,10 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener { } //一键上报 ivOneClickReport.setOnClickListener { + if(!canOneReport){ + ToastUtils.showShort("故障描述获取失败不能上报") + return@setOnClickListener + } hasReportOperate = true BadCaseConfig.newFMInfoMsg?.fmInfoList?.forEach { faultCodeList.add(it.faultId) @@ -243,7 +253,7 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener { mWindowManager!!.addView(mFloatLayout, mWindowParams) showOneCLickReportView() //请求一键上报故障码 - CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,1,1,4,1) + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,0,4,1) } } @@ -286,11 +296,38 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener { override fun getCategoriesSuccess(list: List) { super.getCategoriesSuccess(list) - //TODO + if(list.isEmpty()){ + ToastUtils.showShort("一键上报故障描述后台未配置") + canOneReport = false + }else{ + when (level) { + 1 -> { + level1Id = list[0].id + level1Name = list[0].name + level = 2 + //请求二级一键上报配置 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,level1Id,4,1) + } + 2 -> { + level2Id = list[0].id + level2Name = list[0].name + level = 3 + //请求三级一键上报配置 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,level2Id,4,1) + } + else -> { + level3Id = list[0].id + level3Name = list[0].name + canOneReport = true + } + } + } } override fun getCategoriesError(msg: String) { super.getCategoriesError(msg) + ToastUtils.showShort("一键上报故障描述获取失败$msg") + canOneReport = false } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt index 3acbf7ff9e..3e8428af81 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt @@ -49,7 +49,6 @@ import com.mogo.tts.base.SpeechUtils import com.zhjt.mogo_core_function_devatools.R import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.workorder.adapter.OrderReasonAdapter -import kotlinx.coroutines.DelicateCoroutinesApi import kotlin.math.absoluteValue /** @@ -80,13 +79,13 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene var ret = 0 // 函数调用返回值 private var audioStatus = false - private var workOrderOccurrenceTime = System.currentTimeMillis() //故障发生时间 - private var clickListener: ClickListener? = null private lateinit var tvTakeOverTime: TextView private lateinit var tbTakeOverType: ToggleButton private lateinit var tbTakeOverReason: ToggleButton + private lateinit var viewTakeOverReason: View + private lateinit var ivTakeOverReason: ImageView private lateinit var etNoteInput: AppCompatEditText private lateinit var ivNoteAudio: ImageView private lateinit var tvTakeOverSave: TextView @@ -98,7 +97,19 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene private lateinit var orderReasonAdapter: OrderReasonAdapter private lateinit var mTakeOverRecordInfo: TakeOverRecordInfo - private var source: Int = 0 //操作源,0:类型;1:原因 + private val type = 2 //接管类接口请求Type值为2 + private var source: Int = 0 //操作源,0:默认,一级分类 1:类型,二级分类;2:原因,三级分类 + private var hasLevel3: Boolean = false //是否有三级分类 + + private var typeList: List ?= null //故障类型列表 + private var reasonList: List ?= null //故障原因列表 + + private var level1Id: Int = 0 //一级分类ID + private var level2Id: Int = 0 //二级分类ID + private var level3Id: Int = 0 //三级分类ID + private var level1Name: String = "" + private var level2Name: String = "" + private var level3Name: String = "" init { initFloatWindow() @@ -130,6 +141,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene tvTakeOverTime = mFloatLayout.findViewById(R.id.tvTakeOverTime) tbTakeOverType = mFloatLayout.findViewById(R.id.tbTakeOverType) tbTakeOverReason = mFloatLayout.findViewById(R.id.tbTakeOverReason) + viewTakeOverReason = mFloatLayout.findViewById(R.id.viewTakeOverReason) + ivTakeOverReason = mFloatLayout.findViewById(R.id.ivTakeOverReason) etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput) ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio) tvTakeOverSave = mFloatLayout.findViewById(R.id.tvTakeOverSave) @@ -143,16 +156,34 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene orderReasonAdapter = OrderReasonAdapter() orderReasonAdapter.setListener(object: OrderReasonAdapter.ReasonSelectListener{ override fun onSelectReason(reason: CategoryInfo, mSource: Int) { - if(mSource == 0){ + if(mSource == 1){ //类型 tbTakeOverType.textOn = reason.name tbTakeOverType.textOff = reason.name + //选择了故障类型 + tbTakeOverReason.visibility = View.VISIBLE + viewTakeOverReason.visibility = View.GONE + ivTakeOverReason.visibility = View.GONE tbTakeOverType.performClick() + if(level2Id != 0 && level2Id == reason.id){ + //故障类型选择没有变化 + reasonList?.let { orderReasonAdapter.setData(it,2) } + }else{ + level2Id = reason.id + level2Name = reason.name + tbTakeOverReason.textOn = "" + tbTakeOverReason.textOff = "" + source = 2 + //获取故障三级分类即故障原因 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,level2Id,type,0) + } }else{ //原因 tbTakeOverReason.textOn = reason.name tbTakeOverReason.textOff = reason.name tbTakeOverReason.performClick() + level3Id = reason.id + level3Name = reason.name } } }) @@ -166,9 +197,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight) val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract) iconUp?.setBounds(0, 0, iconUp.minimumWidth, iconUp.minimumHeight) - //弹窗展示时间 - tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) + - millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat()) + //获取一级分类 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,1,0,type,0) //接管类型选择 tbTakeOverType.setOnCheckedChangeListener { buttonView, isChecked -> if (isChecked) { @@ -178,16 +208,26 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene (rvTakeOverList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbTakeOverType tbTakeOverReason.visibility = View.INVISIBLE - source = 0 - //获取故障二级分类即故障类型 - CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,1,1,0) + source = 1 + if(typeList.isNullOrEmpty()){ + //获取故障二级分类即故障类型 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,type,0) + }else{ + orderReasonAdapter.setData(typeList!!,source) + } } else { buttonView.setCompoundDrawables(null, null, iconDown, null) //隐藏列表 rvTakeOverList.visibility = View.GONE - tbTakeOverReason.visibility = View.VISIBLE } } + viewTakeOverReason.setOnClickListener { + ToastUtils.showShort("请先选择接管类型") + } + ivTakeOverReason.setOnClickListener { + ToastUtils.showShort("请先选择接管类型") + } + //接管原因选择 tbTakeOverReason.setOnCheckedChangeListener { buttonView, isChecked -> if (isChecked) { @@ -195,10 +235,6 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene //展示列表 rvTakeOverList.visibility = View.VISIBLE (rvTakeOverList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbTakeOverReason - - source = 1 - //获取故障三级分类即故障原因 - CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,1,1,0) } else { buttonView.setCompoundDrawables(null, null, iconDown, null) //隐藏列表 @@ -246,7 +282,21 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene } //保存 tvTakeOverSave.setOnClickListener{ + if(level2Name.isEmpty()){ + ToastUtils.showShort("请完整填写再保存") + return@setOnClickListener + } + if(hasLevel3 && level3Name.isEmpty()){ + ToastUtils.showShort("请完整填写再保存") + return@setOnClickListener + } mTakeOverRecordInfo.reportNote = etNoteInput.text.toString() + mTakeOverRecordInfo.level1Id = level1Id + mTakeOverRecordInfo.level1Name = level1Name + mTakeOverRecordInfo.level2Id = level2Id + mTakeOverRecordInfo.level2Name = level2Name + mTakeOverRecordInfo.level3Id = level3Id + mTakeOverRecordInfo.level3Name = level3Name CallerTakeOverManager.updateRecord(mActivity,mTakeOverRecordInfo) clickListener?.onSaveReason(mTakeOverRecordInfo) hideFloatWindow() @@ -383,6 +433,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene return true } + @SuppressLint("SetTextI18n") fun showFloatWindow(takeOverRecordInfo: TakeOverRecordInfo) { if (mFloatLayout.parent == null) { val metrics = DisplayMetrics() @@ -393,6 +444,13 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene mWindowManager!!.addView(mFloatLayout, mWindowParams) } mTakeOverRecordInfo = takeOverRecordInfo + if(mTakeOverRecordInfo.faultStartTime == 0L){ + tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) + + millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat()) + }else{ + tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) + + millis2String(mTakeOverRecordInfo.faultStartTime, TimeUtils.getHourMinSecondFormat()) + } } fun hideFloatWindow() { @@ -414,13 +472,35 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene super.getCategoriesSuccess(list) ThreadUtils.runOnUiThread { if(list.isNotEmpty()){ - orderReasonAdapter.setData(list,source) + if(source == 0){ + level1Id = list[0].id + level1Name = list[0].name + + source = 1 + //获取故障二级分类即故障类型 + CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,type,0) + }else{ + if(source == 1){ + typeList = list + }else{ + reasonList = list + hasLevel3 = true + } + orderReasonAdapter.setData(list,source) + } + }else{ + if(source == 2){ + hasLevel3 = false + }else{ + ToastUtils.showShort("接管类型列表为空") + } } } } override fun getCategoriesError(msg: String) { super.getCategoriesError(msg) + ToastUtils.showShort("接管列表获取失败:$msg") } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt index 00f3d66ab5..e7cdae6b6e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt @@ -71,7 +71,7 @@ class TakeOverRecordView @JvmOverloads constructor( CallerDevaToolsListenerManager.removeListener(TAG) } //接管记录日期 - tvTakeOverRecordDate.text = TimeUtils.millis2String(System.currentTimeMillis(), getYMDFormat()) + tvTakeOverRecordDate.text = millis2String(System.currentTimeMillis(), getYMDFormat()) val linearLayoutManager = LinearLayoutManager(context) rvTakeOverList.layoutManager = linearLayoutManager takeOverListAdapter = TakeOverListAdapter(context) @@ -117,9 +117,18 @@ class TakeOverRecordView @JvmOverloads constructor( while(recordIterator.hasNext()){ val uploadRecord = recordIterator.next() uploadRecord.let { + if(it.level1Id == 0 || it.level2Id == 0 || it.level3Id == 0){ + ToastUtils.showShort("请编辑选中的接管记录") + return@setOnClickListener + } + val reason = if(it.reportNote.isEmpty()){ + "${it.level1Name}-${it.level2Name}-${it.level3Name}" + }else{ + "${it.level1Name}-${it.level2Name}-${it.level3Name}(${it.reportNote})" + } val padProblemInfo = PadProblemInfo(it.address, emptyList(), millis2String(it.faultStartTime),it.level1Id,it.level2Id,it.level3Id, - it.lineName,it.reportNote,1, + it.lineName,reason,1, SharedPrefsMgr.getInstance().getString("och_account","")) padProblemList.add(padProblemInfo) } @@ -179,12 +188,21 @@ class TakeOverRecordView @JvmOverloads constructor( override fun problemPadAddSuccess() { super.problemPadAddSuccess() - + ToastUtils.showShort("接管记录上传成功") + //更新记录状态并且刷新列表 + ThreadUtils.runOnUiThread { + selectedUploadRecord.forEach { + it.reportStatus = true + it.selectStatus = false + CallerTakeOverManager.updateRecord(context,it) + takeOverListAdapter?.notifyRecordItemChanged(it) + } + } } override fun problemPadAddError(msg: String) { super.problemPadAddError(msg) - + ToastUtils.showShort("接管记录上传失败$msg") } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderApiService.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderApiService.kt index 52400bd3ef..cb491c8332 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderApiService.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderApiService.kt @@ -1,6 +1,7 @@ package com.zhjt.mogo_core_function_devatools.workorder import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.Response import com.mogo.eagle.core.data.deva.report.CategoryInfo import com.mogo.eagle.core.data.deva.report.PadAddProblemReq @@ -29,7 +30,10 @@ interface WorkOrderApiService { */ @Headers("Content-Type:application/json;charset=UTF-8") @POST("/vehicle-data-service/problem/pad/add") - suspend fun problemPadAdd(@Body padAddProblemReq: PadAddProblemReq): Response + suspend fun problemPadAdd( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String= SharedPrefsMgr.getInstance().token, + @Body padAddProblemReq: PadAddProblemReq): Response /** * 获取报障、接管、一键上报配置 @@ -38,11 +42,27 @@ interface WorkOrderApiService { @GET("/platform/biz/categories/terminal") suspend fun getCategories( @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, - @Header("tenantId") tenantId: Long, + @Header("ticket") ticket: String= SharedPrefsMgr.getInstance().token, + @Header("x-tenant-id") tenantId: Long, @Query("level") level: Int, @Query("parentId") parentId: Int, @Query("type") type: Int, @Query("upType") upType: Int ): Response> + + /** + * 获取报障、接管、一键上报配置 + */ + @Headers("Content-type:application/json;charset=UTF-8") + @GET("/platform/biz/categories/terminal") + suspend fun getCategories( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String= SharedPrefsMgr.getInstance().token, + @Header("x-tenant-id") tenantId: Long, + @Query("level") level: Int, + @Query("type") type: Int, + @Query("upType") upType: Int + ): Response> + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderNetWorkModel.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderNetWorkModel.kt index fd6f41f0a8..626e00094d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderNetWorkModel.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderNetWorkModel.kt @@ -1,6 +1,7 @@ package com.zhjt.mogo_core_function_devatools.workorder import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.Response import com.mogo.eagle.core.data.deva.report.CategoryInfo import com.mogo.eagle.core.data.deva.report.PadAddProblemReq @@ -46,7 +47,8 @@ class WorkOrderNetWorkModel { request>{ loader{ apiResponseCall{ - getNetWorkApi(getOchUrl()).problemPadAdd(padAddProblemReq) + getNetWorkApi(getOchUrl()).problemPadAdd(MoGoAiCloudClientConfig.getInstance().serviceAppId, + SharedPrefsMgr.getInstance().token,padAddProblemReq) } } onSuccess{ @@ -67,7 +69,13 @@ class WorkOrderNetWorkModel { request>>{ loader{ apiResponseCall{ - getNetWorkApi(getOchUrl()).getCategories(MoGoAiCloudClientConfig.getInstance().serviceAppId,tenantId, level, parentId,type,upType) + if(parentId == 0){ + getNetWorkApi(getOchUrl()).getCategories(MoGoAiCloudClientConfig.getInstance().serviceAppId, + SharedPrefsMgr.getInstance().token,tenantId, level,type,upType) + }else{ + getNetWorkApi(getOchUrl()).getCategories(MoGoAiCloudClientConfig.getInstance().serviceAppId, + SharedPrefsMgr.getInstance().token,tenantId, level, parentId,type,upType) + } } } onSuccess { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt index 6435efb313..887ea182e8 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt @@ -80,11 +80,16 @@ class TakeOverListAdapter(private val context: Context): RecyclerView.Adapter + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml index 9dda0c1899..6edb6f615f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml @@ -128,6 +128,30 @@ android:textColor="@color/white" android:paddingStart="@dimen/dp_21" android:paddingEnd="@dimen/dp_21" + android:visibility="invisible" + /> + + + + @@ -269,7 +293,7 @@ android:layout_height="wrap_content" app:constraint_referenced_ids="viewTakeOverTypeLabel,tvTypeTitle, tbTakeOverType,viewTakeOverReasonLabel,tvTakeOverReasonTitle, - tbTakeOverReason,viewTakeOverNoteLabel,tvTakeOverNoteTitle, + viewTakeOverReason,ivTakeOverReason,viewTakeOverNoteLabel,tvTakeOverNoteTitle, tvTakeOverNoteSupplement,etNoteInput,ivNoteAudio, tvTakeOverReport,tvTakeOverCancel" /> diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/report/TakeOverRecordInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/report/TakeOverRecordInfo.kt index 6f55412789..8a0c163c5c 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/report/TakeOverRecordInfo.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/report/TakeOverRecordInfo.kt @@ -7,6 +7,9 @@ package com.mogo.eagle.core.data.deva.report * @param level1Id 一级分类ID * @param level2Id 二级分类ID * @param level3Id 三级分类ID + * @param level1Name 一级分类名称 + * @param level2Name 二级分类名称 + * @param level3Name 三级分类名称 * @param lineName 行驶路线 * @param reportNote 上报描述 * @param reportStatus 上传状态 false:未上传,可编辑 true:已上传,不可编辑 @@ -14,5 +17,6 @@ package com.mogo.eagle.core.data.deva.report */ data class TakeOverRecordInfo(var faultStartTime: Long, var address:String, var level1Id: Int, var level2Id: Int, var level3Id: Int, + var level1Name: String,var level2Name: String,var level3Name: String, var lineName: String, var reportNote: String, var reportStatus: Boolean,var selectStatus: Boolean) \ No newline at end of file