diff --git a/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt b/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt index 6b9e4f49e8..64b3a1bc52 100644 --- a/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt +++ b/OCH/facade/src/main/java/com/mogo/och/facade/route/FacadeProvider.kt @@ -15,6 +15,7 @@ import com.mogo.commons.env.ProjectUtils import com.mogo.commons.utils.MogoAnalyticUtils import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.hmi.ui.setting.SopView import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView @@ -187,6 +188,7 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback { BusinessEnum.Charter -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.CHARTER}_${identity}_${model}" } + CallerDevaToolsManager.updateAppChannel() // 加入启动统计 val mStartParams: HashMap = HashMap() mStartParams["start_time"] = TimeUtils.getNowMills() 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 e7235038a0..006b108e58 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,7 +27,7 @@ object RecordManager { */ fun insertRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){ takeOverRecordInfo.let { - val recordInfo = RecordInfo(null,it.address,it.faultStartTime,it.level1Id, + val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id, it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus) if (Thread.currentThread() == Looper.getMainLooper().thread){ scope.launch{ @@ -59,7 +59,7 @@ object RecordManager { */ fun updateRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){ takeOverRecordInfo.let{ - val recordInfo = RecordInfo(null,it.address,it.faultStartTime,it.level1Id, + val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id, it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus) if (Thread.currentThread() == Looper.getMainLooper().thread){ scope.launch{ @@ -91,7 +91,7 @@ object RecordManager { */ fun deleteRecord(context: Context, takeOverRecordInfo: TakeOverRecordInfo) { takeOverRecordInfo.let{ - val recordInfo = RecordInfo(null,it.address,it.faultStartTime,it.level1Id, + val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id, it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus) if (Thread.currentThread() == Looper.getMainLooper().thread){ scope.launch { 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 93ad9ecb72..a1a9c29ccf 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 @@ -9,15 +9,12 @@ import androidx.room.PrimaryKey */ @Entity(tableName = "take_over_record") data class RecordInfo( - //自增主键 - @PrimaryKey(autoGenerate = true) - var id: Int ?= null, + //故障开始时间 主键 + @PrimaryKey(autoGenerate = false) + val faultStartTime: Long, //故障地点 @ColumnInfo val address: String, - //故障开始时间 yyyy-MM-dd HH:mm:ss - @ColumnInfo - val faultStartTime: String, //一级分类ID @ColumnInfo var level1Id: Int, diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 938bc209b2..c58a2394db 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -291,6 +291,16 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener { } } + /** + * 受channel业务影响的功能,需要更新,todo 建议有流程 + * AppIdentityModeUtils.getMisChannelCode + */ + override fun updateAppChannel() { + bizConfigCenter.updateChannelRole() //功能开关配置更新 + traceManager.syncConfig() //同步信息至ms + BindingCarManager.queryAppUpgrade() //更新App升级信息 + } + private fun initMatrix() { val builder: Matrix.Builder = Matrix.Builder(AbsMogoApplication.getApp()) builder.pluginListener(object : PluginListener { 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 ebd9af2845..f01ca7f96c 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 @@ -1,6 +1,7 @@ package com.zhjt.mogo_core_function_devatools.badcase +import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.graphics.Bitmap @@ -74,6 +75,8 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis private var record: AutoPilotRecord? = null private var recordKey: Long = 0 //主动录制bag包key + @SuppressLint("StaticFieldLeak") + private var reportTypeWindow: ReportTypeWindow ?= null fun init(context: Context) { CallerAutopilotRecordListenerManager.addListener(TAG, this) @@ -191,18 +194,19 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis view.setOnClickListener{ if (ClickUtils.isFastClick()){ if (NetworkUtils.isConnected()){ - //TODO 更改dockerVersion是否为空 - if (BadCaseConfig.dockerVersion == null){ + if (BadCaseConfig.dockerVersion != null){ if(ProjectUtils.isSaas()){ //660版本数据闭环增加统一上报问题入口(仅限于saas渠道) - //TODO 已存在WIndow再次点击会再次创建WIndow - val reportTypeWindow = ReportTypeWindow(activity) - reportTypeWindow.setClickListener(object: ReportTypeWindow.ClickListener{ - override fun closeWindow() { - reportTypeWindow.hideFloatWindow() - } - }) - reportTypeWindow.showFloatWindow() + if(reportTypeWindow == null){ + reportTypeWindow = ReportTypeWindow(activity) + reportTypeWindow?.setClickListener(object: ReportTypeWindow.ClickListener{ + override fun closeWindow() { + reportTypeWindow?.hideFloatWindow() + reportTypeWindow = null + } + }) + reportTypeWindow?.showFloatWindow() + } }else{ //展示工单上报弹窗 val workOrderWindow = WorkOrderWindow(activity) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt index 892b3dd8b7..842744d77a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt @@ -20,6 +20,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.deva.report.WorkOrderReportInfo +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.getMisChannelCode import com.zhjt.mogo_core_function_devatools.trace.TraceManager import com.zhjt.mogo_core_function_devatools.upgrade.IPCUpgradeManager.Companion.ipcUpgradeManager import com.zhjt.mogo_core_function_devatools.upgrade.ObuUpgradeAppNetWorkManager @@ -228,7 +230,7 @@ object BindingCarManager : IMoGoAutopilotCarConfigListener, IMoGoCloudListener { } CallerLogger.d(M_DEVA + "UPGRADE", "---- 3 ----[mac: $macAddress]") UpgradeAppNetWorkManager.instance - ?.getAppUpgradeInfo(mContext, macAddress, role.toString() + "") + ?.getAppUpgradeInfo(mContext, macAddress, AppIdentityModeUtils.getMisChannelCode(FunctionBuildConfig.appIdentityMode).toString() + "") } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigCenter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigCenter.kt index 1ab4a727c3..a39aa5edfd 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigCenter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigCenter.kt @@ -10,6 +10,8 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_ST import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.SPUtils import com.mogo.eagle.core.utilcode.util.ToastUtils @@ -35,6 +37,8 @@ class FuncConfigCenter : IMogoOnMessageListener, IMoGoAutopilotCarCo private var mContext: Context? = null private val funcConfigNetWorkModel = FuncConfigNetWorkModel() + @Volatile + private var macAddress:String? = null fun init(context: Context) { mContext = context @@ -48,15 +52,26 @@ class FuncConfigCenter : IMogoOnMessageListener, IMoGoAutopilotCarCo refreshConfig(GsonUtils.fromJson(bizJson, FuncConfig::class.java)) } + fun updateChannelRole(){ + macAddress?.let { + refresh(it) + } + } + override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { if (!carConfigResp.macAddress.isNullOrEmpty()) { - UiThreadHandler.post { - funcConfigNetWorkModel.requestFuncConfig(carConfigResp.macAddress, { - SPUtils.getInstance("biz_config").put("config", GsonUtils.toJson(it)) - refreshConfig(it) }, {}) - } + macAddress = carConfigResp.macAddress + refresh(carConfigResp.macAddress) } else { - ToastUtils.showLong("未获取到域控mac信息") + CallerLogger.i("$M_DEVA$TAG","未获取到域控mac信息") + } + } + + private fun refresh(macAddress: String){ + UiThreadHandler.post { + funcConfigNetWorkModel.requestFuncConfig(macAddress, { + SPUtils.getInstance("biz_config").put("config", GsonUtils.toJson(it)) + refreshConfig(it) }, {}) } } 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 df4c2c8412..0917bac5be 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 @@ -5,6 +5,8 @@ import android.annotation.SuppressLint import android.app.Activity import android.graphics.PixelFormat import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.text.Editable import android.text.TextWatcher import android.util.DisplayMetrics @@ -27,28 +29,44 @@ import androidx.constraintlayout.widget.Group import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult import com.iflytek.cloud.ErrorCode import com.iflytek.cloud.InitListener import com.iflytek.cloud.RecognizerListener import com.iflytek.cloud.RecognizerResult import com.iflytek.cloud.SpeechError import com.iflytek.cloud.SpeechRecognizer +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.data.deva.report.CategoryInfo +import com.mogo.eagle.core.data.deva.report.PadAddProblemReq +import com.mogo.eagle.core.data.deva.report.PadProblemInfo +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener +import com.mogo.eagle.core.function.api.order.IOrderListener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.JsonParser +import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.tts.base.SpeechUtils import com.zhjt.mogo_core_function_devatools.R import com.zhjt.mogo_core_function_devatools.workorder.adapter.OrderReasonAdapter -import kotlinx.coroutines.DelicateCoroutinesApi import kotlin.math.absoluteValue /** * 故障原因编辑窗口 */ -class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ +class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener, + IMoGoDevaToolsListener, IOrderListener { companion object{ const val TAG = "FaultReasonWindow" @@ -93,6 +111,15 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ private lateinit var orderReasonAdapter: OrderReasonAdapter + private var address: String = "" //故障地点 + private var faultCodeList = ArrayList() //故障码列表 + private var level1Id: Int = 0 //一级分类ID + private var level2Id: Int = 0 //二级分类ID + private var level3Id: Int = 0 //三级分类ID + private var lineName: String = "" //行驶路线 + private var reportNote: String = "" //上报描述 + private val reportType: Int = 2 //上报方式:0:小程序 1:司机屏 2:云端上报 + init { initFloatWindow() } @@ -158,6 +185,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ @SuppressLint("SetTextI18n") private fun initEvent(){ + CallerDevaToolsListenerManager.addListener(TAG, this) + CallerOrderListenerManager.addListener(TAG,this) val iconDown = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_expand) iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight) val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract) @@ -268,7 +297,30 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ } //上报 tvFaultReport.setOnClickListener{ - //TODO + CallerOrderListenerManager.invokeOrderLineUpdate("测试") + + val geocodeSearch = GeocodeSearch(mActivity) + geocodeSearch.setOnGeocodeSearchListener(object: GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult?, p1: Int) { + regeocodeResult?.regeocodeAddress?.formatAddress?.let { + address = it + } + val padProblemList= ArrayList() + val padProblemInfo = PadProblemInfo(address,faultCodeList,millis2String(workOrderOccurrenceTime),level1Id, + level2Id,level3Id,lineName,reportNote,reportType, + SharedPrefsMgr.getInstance().getString("och_account","")) + padProblemList.add(padProblemInfo) + val padAddProblemReq = PadAddProblemReq(padProblemList,AppConfigInfo.plateNumber) + CallerDevaToolsManager.problemPadAdd(padAddProblemReq) + } + + override fun onGeocodeSearched(p0: GeocodeResult?, p1: Int) { + + } + }) + val latLon = LatLonPoint(CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude, CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude) + val q = RegeocodeQuery(latLon,200f,GeocodeSearch.AMAP) + geocodeSearch.getFromLocationAsyn(q) } //取消 tvFaultCancel.setOnClickListener { @@ -306,6 +358,10 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ } } + /** + * 初始化监听器。 + */ + /** * 初始化监听器。 */ @@ -315,6 +371,10 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ } } + /** + * 听写监听器。 + */ + /** * 听写监听器。 */ @@ -353,6 +413,10 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ } + /** + * 显示结果 + */ + /** * 显示结果 */ @@ -416,10 +480,11 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ } fun hideFloatWindow() { + CallerDevaToolsListenerManager.removeListener(TAG) + CallerOrderListenerManager.removeListener(TAG) if (mFloatLayout.parent != null){ mWindowManager!!.removeView(mFloatLayout) } - CallerDevaToolsListenerManager.removeListener(TAG) } fun setClickListener(clickListener: ClickListener) { @@ -430,4 +495,42 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener{ fun closeWindow() } + /** + * 故障上报成功 + */ + override fun problemPadAddSuccess() { + super.problemPadAddSuccess() + //显示上报成功页面,短暂停留关闭弹窗 + ThreadUtils.runOnUiThread { + rvFaultList.visibility = View.GONE + tvUploadSuccess.visibility = View.VISIBLE + faultReasonGroup.visibility = View.GONE + val successHandler = Handler(Looper.getMainLooper()) + successHandler.postDelayed({ + hideFloatWindow() + },1500) + } + } + + override fun problemPadAddError(msg: String) { + super.problemPadAddError(msg) + ToastUtils.showShort("故障原因上报失败$msg") + } + + override fun getCategoriesSuccess(list: List) { + super.getCategoriesSuccess(list) + } + + override fun getCategoriesError(msg: String) { + super.getCategoriesError(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 76132ee3d0..af5a73474b 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 @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.app.Activity import android.graphics.PixelFormat import android.os.CountDownTimer +import android.os.Handler +import android.os.Looper import android.os.SystemClock import android.util.DisplayMetrics import android.view.Gravity @@ -125,11 +127,17 @@ class ReportTypeWindow constructor(activity: Activity) { BadCaseConfig.type, Random(SystemClock.elapsedRealtime()).nextInt().absoluteValue, BadCaseConfig.totalDuration, BadCaseConfig.previousDuration) if(response){ - ToastUtils.showShort("主动录包命令下发成功") + //已发起录包 + reportTypeGroup.visibility = View.GONE + tvReportSuccess.visibility = View.VISIBLE + tvReportSuccess.text = mActivity.resources.getString(R.string.record_success) + val successHandler = Handler(Looper.getMainLooper()) + successHandler.postDelayed({ + clickListener?.closeWindow() + },1500) }else{ ToastUtils.showShort("主动录包命令下发失败") } - clickListener?.closeWindow() } } @@ -139,7 +147,7 @@ class ReportTypeWindow constructor(activity: Activity) { val metrics = DisplayMetrics() // 默认固定位置,靠屏幕右边缘的中间 mWindowManager!!.defaultDisplay.getMetrics(metrics) - mWindowParams!!.x = metrics.widthPixels-2257 + mWindowParams!!.x = metrics.widthPixels-2258 mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-420 mWindowManager!!.addView(mFloatLayout, mWindowParams) } 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 67173ce888..6d2e5dd8d7 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 @@ -33,7 +33,11 @@ import com.iflytek.cloud.RecognizerListener import com.iflytek.cloud.RecognizerResult import com.iflytek.cloud.SpeechError import com.iflytek.cloud.SpeechRecognizer +import com.mogo.eagle.core.data.deva.report.CategoryInfo +import com.mogo.eagle.core.data.deva.report.TakeOverRecordInfo +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager +import com.mogo.eagle.core.function.call.takeover.CallerTakeOverManager import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.JsonParser import com.mogo.eagle.core.utilcode.util.TimeUtils @@ -48,7 +52,8 @@ import kotlin.math.absoluteValue /** * 接管原因编辑窗口 */ -class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener { +class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener, + IMoGoDevaToolsListener { companion object{ const val TAG = "TakeOverReasonWindow" @@ -81,13 +86,14 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene private lateinit var tbTakeOverReason: ToggleButton private lateinit var etNoteInput: AppCompatEditText private lateinit var ivNoteAudio: ImageView - private lateinit var tvTakeOverReport: TextView + private lateinit var tvTakeOverSave: TextView private lateinit var tvTakeOverCancel: TextView private lateinit var rvTakeOverList: RecyclerView private lateinit var tvUploadSuccess: AppCompatTextView private lateinit var takeOverReasonGroup: Group private lateinit var orderReasonAdapter: OrderReasonAdapter + private lateinit var mTakeOverRecordInfo: TakeOverRecordInfo init { initFloatWindow() @@ -121,7 +127,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene tbTakeOverReason = mFloatLayout.findViewById(R.id.tbTakeOverReason) etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput) ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio) - tvTakeOverReport = mFloatLayout.findViewById(R.id.tvTakeOverReport) + tvTakeOverSave = mFloatLayout.findViewById(R.id.tvTakeOverSave) tvTakeOverCancel = mFloatLayout.findViewById(R.id.tvTakeOverCancel) rvTakeOverList = mFloatLayout.findViewById(R.id.rvTakeOverList) tvUploadSuccess = mFloatLayout.findViewById(R.id.tvUploadSuccess) @@ -150,6 +156,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene @SuppressLint("SetTextI18n") private fun initEvent(){ + CallerDevaToolsListenerManager.addListener(TAG, this) val iconDown = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_expand) iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight) val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract) @@ -245,8 +252,11 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene setAudio(audioStatus) } //上报 - tvTakeOverReport.setOnClickListener{ - //TODO + tvTakeOverSave.setOnClickListener{ + mTakeOverRecordInfo.reportNote = etNoteInput.text.toString() + CallerTakeOverManager.updateRecord(mActivity,mTakeOverRecordInfo) + clickListener?.onSaveReason() + hideFloatWindow() } //取消 tvTakeOverCancel.setOnClickListener { @@ -379,7 +389,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene return true } - fun showFloatWindow() { + fun showFloatWindow(takeOverRecordInfo: TakeOverRecordInfo) { if (mFloatLayout.parent == null) { val metrics = DisplayMetrics() // 默认固定位置,靠屏幕右边缘的中间 @@ -387,9 +397,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene mWindowParams!!.x = metrics.widthPixels-890 mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-1140 mWindowManager!!.addView(mFloatLayout, mWindowParams) - - } + mTakeOverRecordInfo = takeOverRecordInfo } fun hideFloatWindow() { @@ -404,7 +413,15 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene } interface ClickListener { - fun closeWindow() + fun onSaveReason() + } + + override fun getCategoriesSuccess(list: List) { + super.getCategoriesSuccess(list) + } + + override fun getCategoriesError(msg: String) { + super.getCategoriesError(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 035bc9c793..4bd688116e 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 @@ -4,19 +4,26 @@ import android.content.Context import android.util.AttributeSet import android.util.Log import android.view.LayoutInflater +import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.fragment.app.FragmentActivity import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.eagle.core.data.deva.report.TakeOverRecordInfo import com.mogo.eagle.core.function.call.takeover.CallerTakeOverManager +import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope +import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils.getYMDFormat +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.eagle.core.utilcode.util.Utils import com.zhjt.mogo_core_function_devatools.R import com.zhjt.mogo_core_function_devatools.workorder.adapter.BottomDecoration import com.zhjt.mogo_core_function_devatools.workorder.adapter.TakeOverListAdapter import kotlinx.android.synthetic.main.view_take_over_record.view.ivTakeOverRecordClose +import kotlinx.android.synthetic.main.view_take_over_record.view.recordGroup import kotlinx.android.synthetic.main.view_take_over_record.view.rvTakeOverList import kotlinx.android.synthetic.main.view_take_over_record.view.tvDeleteSelect +import kotlinx.android.synthetic.main.view_take_over_record.view.tvRecordNoData import kotlinx.android.synthetic.main.view_take_over_record.view.tvTakeOverRecordDate import kotlinx.android.synthetic.main.view_take_over_record.view.tvUpload import kotlinx.coroutines.Dispatchers @@ -37,6 +44,10 @@ class TakeOverRecordView @JvmOverloads constructor( const val TAG = "TakeOverRecordView" } + private val scope by lazy { + Utils.getApp().lifeCycleScope + } + private var takeOverListAdapter: TakeOverListAdapter ?= null private var clickListener: ClickListener? = null private val selectedUploadRecord = ArrayList() @@ -62,7 +73,13 @@ class TakeOverRecordView @JvmOverloads constructor( val activity = context as? FragmentActivity ?: throw IllegalStateException("please ensure context is FragmentActivity.") val takeOverReasonWindow = TakeOverReasonWindow(activity) - takeOverReasonWindow.showFloatWindow() + takeOverReasonWindow.setClickListener(object: TakeOverReasonWindow.ClickListener{ + override fun onSaveReason() { + //刷新列表 TODO 应该局部刷新 + refreshList() + } + }) + takeOverReasonWindow.showFloatWindow(takeOverRecordInfo) } override fun onSelectRecord( @@ -83,43 +100,42 @@ class TakeOverRecordView @JvmOverloads constructor( ) rvTakeOverList.adapter = takeOverListAdapter - val list = ArrayList() - -// GlobalScope.launch(Dispatchers.IO){ -// list = CallerTakeOverManager.getAllRecord(context) -// } - - val takeOverRecordInfoOne = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineNamelineNamelineNamelineNamelineNamelineNamelineNamelineNamelineNamelineName","描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1描述1",false) - val takeOverRecordInfoTwo = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述2",false) - val takeOverRecordInfoThree = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述3",true) - val takeOverRecordInfoFour = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述4",true) - val takeOverRecordInfoFive = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述5",false) - val takeOverRecordInfoSix = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述6",false) - val takeOverRecordInfoSeven = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述7",false) - val takeOverRecordInfoEight = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述8",true) - val takeOverRecordInfoNine = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述9",false) - val takeOverRecordInfoTen = TakeOverRecordInfo(System.currentTimeMillis().toString(),"环球贸易中心",1,2,3,"lineName","描述10",true) - - list.add(takeOverRecordInfoOne) - list.add(takeOverRecordInfoTwo) - list.add(takeOverRecordInfoThree) - list.add(takeOverRecordInfoFour) - list.add(takeOverRecordInfoFive) - list.add(takeOverRecordInfoSix) - list.add(takeOverRecordInfoSeven) - list.add(takeOverRecordInfoEight) - list.add(takeOverRecordInfoNine) - list.add(takeOverRecordInfoTen) - - takeOverListAdapter?.setData(list) - //一键上传 tvUpload.setOnClickListener { } //删除 tvDeleteSelect.setOnClickListener { -// CallerTakeOverManager.deleteRecord(context,) + if(selectedUploadRecord.isEmpty()){ + ToastUtils.showShort("请选择需要删除的接管记录") + }else{ + selectedUploadRecord.forEach { + CallerTakeOverManager.deleteRecord(context,it) + } + refreshList() + } + } + refreshList() + } + + /** + * 刷新接管记录列表 + */ + private fun refreshList(){ + scope.launch(Dispatchers.IO){ + val recordList= CallerTakeOverManager.getAllRecord(context) + ThreadUtils.runOnUiThread { + if(recordList.isEmpty()){ + tvRecordNoData.visibility = View.VISIBLE + recordGroup.visibility = View.GONE + }else{ + tvRecordNoData.visibility = View.GONE + recordGroup.visibility = View.VISIBLE + //更新列表 + takeOverListAdapter?.setData(recordList) + } + + } } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt index 3fb31414b1..0966002228 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt @@ -75,7 +75,7 @@ class WorkOrderManager{ CallerDevaToolsListenerManager.invokeProblemPadAddSuccess() }, onError = { - CallerDevaToolsListenerManager.invokeProblemPadAddError() + CallerDevaToolsListenerManager.invokeProblemPadAddError(it) } ) } 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 2d99a2f7af..e73afa83d4 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 @@ -53,7 +53,7 @@ class WorkOrderNetWorkModel { onSuccess.invoke("") } onError{ - onError.invoke("") + onError.invoke(it.message+"") } } } 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 5cf55c2ad3..280ca9898b 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 @@ -10,6 +10,7 @@ import android.widget.TextView import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.data.deva.report.TakeOverRecordInfo +import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.zhjt.mogo_core_function_devatools.R @@ -35,11 +36,10 @@ class TakeOverListAdapter(private val context: Context): RecyclerView.Adapter clickListener?.onSelectRecord(recordEntity,isChecked) } - holder.tvFaultStartTime.text = recordEntity.faultStartTime + holder.tvFaultStartTime.text = TimeUtils.millis2String(recordEntity.faultStartTime) holder.tvLineName.text = recordEntity.lineName holder.tvTakeOverReason.text = recordEntity.reportNote if(recordEntity.reportStatus){ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_record_no_data.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_record_no_data.png new file mode 100644 index 0000000000..246b3c4f38 Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_record_no_data.png differ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_fault_reason.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_fault_reason.xml index 53b4bc3c6d..8dbc30dff8 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_fault_reason.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_fault_reason.xml @@ -266,7 +266,7 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:background="@drawable/report_button_bg" - android:text="@string/take_over_report" + android:text="@string/fault_report" android:textColor="#FFFFFF" android:textSize="@dimen/sp_27" android:textStyle="bold" diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_report_type.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_report_type.xml index 52fcdf265a..de8a514a7a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_report_type.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_report_type.xml @@ -111,7 +111,7 @@ android:textSize="@dimen/sp_26" android:textColor="@color/white" app:drawableTopCompat="@drawable/icon_report_success" - android:layout_marginTop="@dimen/dp_59" + android:layout_marginTop="@dimen/dp_79" android:drawablePadding="@dimen/dp_22" android:visibility="gone" /> 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 f0ca7f315f..55140a6af9 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 @@ -201,13 +201,13 @@ /> + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml index 15a42e6840..8a3a241e52 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml @@ -61,7 +61,9 @@ (选填) 手动输入 补充描述语音输入 - 上报 + 上报 + 保存 取消 + 暂无接管记录 \ No newline at end of file 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 8b90e06d46..10f0cf0fc2 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 @@ -11,6 +11,6 @@ package com.mogo.eagle.core.data.deva.report * @param reportNote 上报描述 * @param reportStatus 上传状态 false:未上传,可编辑 true:已上传,不可编辑 */ -data class TakeOverRecordInfo(var faultStartTime: String, var address:String, +data class TakeOverRecordInfo(var faultStartTime: Long, var address:String, var level1Id: Int, var level2Id: Int, var level3Id: Int, var lineName: String, var reportNote: String, var reportStatus: Boolean) \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index b4119f3c75..f09c16aa97 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -41,6 +41,11 @@ interface IDevaToolsProvider : IProvider { */ fun checkUploadCrashLog() + /** + * App 业务记录 更新 + */ + fun updateAppChannel() + /** * 开始抓取日志,默认10min */ diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt index 36e1e015c3..3a00f45dd3 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsListener.kt @@ -58,7 +58,7 @@ interface IMoGoDevaToolsListener { fun problemPadAddSuccess(){} - fun problemPadAddError(){} + fun problemPadAddError(msg: String){} fun getCategoriesSuccess(list: List){} diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt index d500af0ab2..d777e4f4a6 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsListenerManager.kt @@ -92,10 +92,10 @@ object CallerDevaToolsListenerManager : CallerBase() { /** * 上报故障到运营平台失败 */ - fun invokeProblemPadAddError(){ + fun invokeProblemPadAddError(msg: String){ M_LISTENERS.forEach{ val listener = it.value - listener.problemPadAddError() + listener.problemPadAddError(msg) } } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index 9d2c6918d3..53f8afcf86 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -50,6 +50,13 @@ object CallerDevaToolsManager { devaToolsProviderApi?.checkUploadCrashLog() } + /** + * 更新AppChannel + */ + fun updateAppChannel(){ + devaToolsProviderApi?.updateAppChannel() + } + /** * 开始抓取全量日志 */