From 03d5e173ee8d9b7ee4c90ed351713dc077681660 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 27 Feb 2023 20:23:04 +0800 Subject: [PATCH] =?UTF-8?q?[M1]=20=E5=8F=B8=E6=9C=BA=E7=AB=AF=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=BF=90=E8=90=A5=E6=B6=88=E6=81=AF=E7=9B=92=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charter/bean/QueryCurrentOrderResponse.kt | 2 + .../och/charter/bean/RequestChangeDest.kt | 2 +- .../IDriverM1ControllerStatusCallback.kt | 8 +- .../och/charter/fragment/DriverM1Fragment.kt | 2 +- .../mogo/och/charter/model/DriverM1Model.kt | 197 +++++++++--------- .../och/charter/net/DriverM1ServiceManager.kt | 4 +- .../charter/presenter/DriverM1Presenter.kt | 42 +++- .../src/driverm1/res/raw/bus_di.mp3 | Bin 15150 -> 0 bytes .../src/driverm1/res/raw/m1_voice_di.mp3 | Bin 0 -> 46365 bytes .../charter/callback/IADASStatusCallback.java | 11 - .../common/module/bean/dpmsg/ChangeDestMsg.kt | 4 +- .../module/bean/dpmsg/DPCommonOperationMsg.kt | 9 + .../module/bean/dpmsg/DPOperateDoorMsg.kt | 2 +- .../module/bean/dpmsg/DPOrderClosedMsg.kt | 2 +- .../socketmessage/OCHSocketMessageManager.kt | 17 +- 15 files changed, 174 insertions(+), 128 deletions(-) delete mode 100644 OCH/mogo-och-charter/src/driverm1/res/raw/bus_di.mp3 create mode 100644 OCH/mogo-och-charter/src/driverm1/res/raw/m1_voice_di.mp3 delete mode 100644 OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt index 475345a1e4..33b553b552 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt @@ -13,6 +13,8 @@ data class QueryCurrentOrderResponse(var data: Result):BaseData(){ //线路id , var orderNo: String, var lineId: Int, var lineName: String, + var startSiteId: String, + var startSiteName: String, var siteId: Int, var siteName: String, var wgs84Lon: Double, diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt index 0505130487..68361127d7 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt @@ -4,4 +4,4 @@ package com.magic.mogo.och.charter.bean * @author: wangmingjun * @date: 2023/2/24 */ -data class RequestChangeDest(var sn: String,var lineId: Int,var siteId: Int) +data class RequestChangeDest(var sn: String,var lineId: Int,var startSiteId: Int,var siteId: Int) diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt index d4881f53de..d6b76a84f3 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt @@ -1,16 +1,14 @@ package com.magic.mogo.och.charter.callback -import com.mogo.eagle.core.data.map.MogoLocation - /** * Created on 2021/9/10 * * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) */ interface IDriverM1ControllerStatusCallback { - // 自车定位 - fun onCarLocationChanged(location: MogoLocation?) - //开始开启自动驾驶 fun startOpenAutopilot() + + //启动自驾失败 + fun onStartAdasFailure() } \ No newline at end of file diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt index 36a92a0c26..d5f34dbf4f 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt @@ -61,7 +61,7 @@ class DriverM1Fragment : CharterBaseFragmentPresenter:VR mode等 : IDriverM1ControllerStatusCallback? = null - private var mADASStatusCallback: IADASStatusCallback? = null - private var mOrderCallback: DriverM1OrderCallback? = null private var mChangeDestCallback: ChangeDestCallback? = null @@ -121,6 +119,7 @@ class DriverM1Model { mContext = AbsMogoApplication.getApp() // 定位监听 CallerChassisLocationGCJ02ListenerManager.addListener(TAG, mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.setListenerHz(TAG,2) //开启自驾后 异常信息返回 OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener) @@ -181,99 +180,19 @@ class DriverM1Model { } if (e is IllegalStateException) { // that's a bug in RxJava or in a custom operator - d(SceneConstant.M_BUS + TAG, "IllegalStateException") + d(SceneConstant.M_CHARTER_D + TAG, "IllegalStateException") Thread.currentThread().uncaughtExceptionHandler.uncaughtException( Thread.currentThread(), e ) return } - d(SceneConstant.M_BUS + TAG, "Undeliverable exception") + d(SceneConstant.M_CHARTER_D + TAG, "Undeliverable exception") } }) } - /** - * 接收乘客屏发来确认信息 - */ - private val mReceivedMsgListener: IReceivedMsgListener = - object : IReceivedMsgListener { - override fun onReceivedMsg(type: Int, byteArray: ByteArray) { - if (TelematicConstant.BUSINESS_STRING == type){ - try { - val msg = GsonUtils.fromJson(String(byteArray), - BaseDPMsg::class.java) as BaseDPMsg - if (msg.type == DPMsgType.TYPE_CHANGE_DEST.type){ - val changeDestMsg = GsonUtils.fromJson(String(byteArray), - ChangeDestMsg::class.java) as ChangeDestMsg - currentChangeDestMsg = changeDestMsg - showChangerDestCommitDialog(changeDestMsg) - } - d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+ GsonUtils.toJson(msg)) - }catch (e: Exception){ - d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+"消息解析错误") - } - - } - } - } - - private fun showChangerDestCommitDialog(changeDestMsg: ChangeDestMsg) { - if (changeDestMsg.destSiteName !== ""){ - UiThreadHandler.post{ - mChangeDestCallback?.showCommitDialog("确认站点", - "请确认是否前往"+ changeDestMsg.destSiteName + "站点") - } - }else if (changeDestMsg.lineName !== ""){ - UiThreadHandler.post{ - mChangeDestCallback?.showCommitDialog("确认路线", - "请确认是否切换"+ changeDestMsg.lineName + "路线") - } - } - } - - private val mMogoOnMessageListener = - object : IMogoOnMessageListener { - override fun onMsgReceived(obj: DataBaseMsg) { - if (obj == null) { - d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = null") - return - } - d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = " + obj.msgType) - - when(obj.msgType){ - OCHSocketMessageManager.msgMonitorType ->{ - val msg = obj as SystemMsg - pushAppOperationalMsgBox(obj.pushTimeStamp, msg.context) - - val list = msg.screenList - if (list.size > 1){ //发送乘客屏 - } - } - OCHSocketMessageManager.msgOperateDoorType ->{ - val msg = obj as OperateDoorMsg -// pushAppOperationalMsgBox(obj.pushTimeStamp, msg.) - sendMsgToClient(DPOperateDoorMsg(true)) - } - OCHSocketMessageManager.msgOrderClosedType ->{ - val msg = obj as OrderCloseMsg - pushAppOperationalMsgBox(obj.pushTimeStamp, msg.message) - sendMsgToClient(DPOrderClosedMsg()) - } - } - - } - - override fun target(): Class { - return DataBaseMsg::class.java - } - } - - fun setAdasStatusCallback(callback: IADASStatusCallback?) { - mADASStatusCallback = callback - } - fun setChangeDestCallback(callback: ChangeDestCallback?){ mChangeDestCallback = callback } @@ -300,7 +219,89 @@ class DriverM1Model { ) stopLoopAbnormalFactors() } + /** + * 接收乘客屏发来确认信息 + */ + private val mReceivedMsgListener: IReceivedMsgListener = + object : IReceivedMsgListener { + override fun onReceivedMsg(type: Int, byteArray: ByteArray) { + if (TelematicConstant.BUSINESS_STRING == type){ + try { + val msg = GsonUtils.fromJson(String(byteArray), + BaseDPMsg::class.java) as BaseDPMsg + if (msg.type == DPMsgType.TYPE_CHANGE_DEST.type){ + val changeDestMsg = GsonUtils.fromJson(String(byteArray), + ChangeDestMsg::class.java) as ChangeDestMsg + currentChangeDestMsg = changeDestMsg + showChangerDestCommitDialog(changeDestMsg) + } + d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+ GsonUtils.toJson(msg)) + }catch (e: Exception){ + d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+"消息解析错误") + } + } + } + } + + private fun showChangerDestCommitDialog(changeDestMsg: ChangeDestMsg) { + if (!TextUtils.isEmpty(changeDestMsg.destSiteName)){ + UiThreadHandler.post{ + mChangeDestCallback?.showCommitDialog("确认站点", + "请确认是否前往"+ changeDestMsg.destSiteName + "站点") + } + }else if (!TextUtils.isEmpty(changeDestMsg.lineName)){ + UiThreadHandler.post{ + mChangeDestCallback?.showCommitDialog("确认路线", + "请确认是否切换"+ changeDestMsg.lineName + "路线") + } + } + } + + private val mMogoOnMessageListener = + object : IMogoOnMessageListener { + override fun onMsgReceived(obj: DataBaseMsg) { + if (obj == null) { + d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = null") + return + } + d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = " + obj.msgType) + + when(obj.msgType){ + OCHSocketMessageManager.msgMonitorType ->{ //运营消息 + val msg = obj as SystemMsg + pushOperationalToMsgBox(obj.pushTimeStamp, msg.context) + val list = msg.screenList + if (list.size > 1){ //发送乘客屏 + sendMsgToClient(DPCommonOperationMsg(msg.context)) + } + } + OCHSocketMessageManager.msgOperateDoorType ->{ + sendMsgToClient(DPOperateDoorMsg(true)) + } + OCHSocketMessageManager.msgOrderClosedType ->{ //订单结束 + val msg = obj as OrderCloseMsg + pushOperationalToMsgBox(obj.pushTimeStamp, msg.message + ,OCHSocketMessageManager.OPERATION_ORDER_TYPE) + sendMsgToClient(DPOrderClosedMsg()) + } + } + + } + + override fun target(): Class { + return DataBaseMsg::class.java + } + } + + fun pushOperationalToMsgBox(time : Long,content : String,type: Int = -1){ + playDI() + pushAppOperationalMsgBox(time, content,type) + } + + private fun playDI(){ + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(mContext, R.raw.m1_voice_di) + } private val mAdasStartFailureListener: OchAdasStartFailureCallback = object : OchAdasStartFailureCallback { override fun onStartAutopilotFailure( @@ -311,10 +312,10 @@ class DriverM1Model { // .triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage) // if (mADASStatusCallback != null && !FunctionBuildConfig.isDemoMode) { // e( -// SceneConstant.M_BUS + TAG, +// SceneConstant.M_CHARTER_D + TAG, // "mAdasStartFailureListener = $startFailedMessage" // ) -// mADASStatusCallback?.onStartAdasFailure() + mControllerStatusCallback?.onStartAdasFailure() // } } } @@ -337,9 +338,6 @@ class DriverM1Model { if (null == gnssInfo) return mLongitude = gnssInfo.longitude mLatitude = gnssInfo.latitude - if (mControllerStatusCallback != null) { - mControllerStatusCallback?.onCarLocationChanged(gnssInfo) - } //是否到站的围栏判断 离站状态并且自动驾驶还未触发到站 // if (isGoingToNextStation && !isArrivedStation) { @@ -351,7 +349,7 @@ class DriverM1Model { //根据围栏判断,是否到达站点 private fun judgeArrivedStation(location: MogoLocation) { // if (backgroundCurrentStationIndex + 1 > stationList!!.size - 1) { -// e(SceneConstant.M_BUS + TAG, "到站数组越界") +// e(SceneConstant.M_CHARTER_D + TAG, "到站数组越界") // return // } // val upcomingStation: BusStationBean = stationList[backgroundCurrentStationIndex + 1] @@ -363,7 +361,7 @@ class DriverM1Model { // ).toDouble() // if (distance <= CharterConst.ARRIVE_AT_END_STATION_DISTANCE) { // d( -// SceneConstant.M_BUS + TAG, "行程日志-judgeArrivedStation() distance = " + distance +// SceneConstant.M_CHARTER_D + TAG, "行程日志-judgeArrivedStation() distance = " + distance // + " to " + upcomingStation.getName() // ) // onArriveAt(null) //无自动驾驶到站信息传null @@ -388,12 +386,12 @@ class DriverM1Model { triggerStartServiceEvent(true, false) val parameters = initAutopilotControlParameters() if (null == parameters) { - d(SceneConstant.M_BUS + TAG, "行程日志-AutopilotControlParameters is empty.") + d(SceneConstant.M_CHARTER_D + TAG, "行程日志-AutopilotControlParameters is empty.") return } startAutoPilot(parameters) d( - SceneConstant.M_BUS + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + SceneConstant.M_CHARTER_D + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName ) if (mControllerStatusCallback != null) { @@ -411,7 +409,7 @@ class DriverM1Model { false //是否强制绘制引导线 setIgnoreConditionDraw(false) // 同步给乘客屏 setIPCDemoMode(false) //是否自动启动自驾 - d(SceneConstant.M_BUS + TAG, "美化模式-ignore:置为false") + d(SceneConstant.M_CHARTER_D + TAG, "美化模式-ignore:置为false") } } @@ -433,7 +431,7 @@ class DriverM1Model { * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 */ fun restartAutopilot() { - d(SceneConstant.M_BUS + TAG, "司机端-启动自动驾驶===$isGoingToNextStation") + d(SceneConstant.M_CHARTER_D + TAG, "司机端-启动自动驾驶===$isGoingToNextStation") //只去启动自动驾驶 startAutopilot() } @@ -635,11 +633,18 @@ class DriverM1Model { fun changeDest(){ if (currentChangeDestMsg == null) return + if (TextUtils.isEmpty(currentChangeDestMsg?.destSiteName)){//确认路线 + d(SceneConstant.M_CHARTER_D + TAG, "confirm line .") + sendCommitMsgToClient(true) + return + } DriverM1ServiceManager.changeDest(mContext,currentChangeDestMsg!!.lineId, + currentChangeDestMsg!!.startSiteId, currentChangeDestMsg!!.destSiteId, object : OchCommonServiceCallback{ override fun onSuccess(data: BaseData?) { if (data != null && data.code == 0){ + d(SceneConstant.M_CHARTER_D + TAG, "confirmed station .") sendCommitMsgToClient(true) } } diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt index a13db84d9f..407afa2d5f 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt @@ -69,11 +69,11 @@ object DriverM1ServiceManager { ?.subscribe(OchCommonSubscribeImpl(context!!, callback, "checkOrderCountDown")) } - fun changeDest(context: Context?,lineId: Int,siteId: Int, + fun changeDest(context: Context?,lineId: Int,startSiteId: Int,siteId: Int, callback: OchCommonServiceCallback?){ mDriverM1ServiceApi.changeDest(MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, - RequestChangeDest(MoGoAiCloudClientConfig.getInstance().sn,lineId,siteId) + RequestChangeDest(MoGoAiCloudClientConfig.getInstance().sn,lineId,startSiteId,siteId) )?.transformTry() ?.subscribe(OchCommonSubscribeImpl(context!!, callback, "changeDest")) } diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt index 84f35c4a7c..8b47fbbf37 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt @@ -4,18 +4,22 @@ import androidx.lifecycle.LifecycleOwner import com.magic.mogo.och.charter.bean.QueryCurrentOrderResponse import com.magic.mogo.och.charter.callback.ChangeDestCallback import com.magic.mogo.och.charter.callback.DriverM1OrderCallback +import com.magic.mogo.och.charter.callback.IDriverM1ControllerStatusCallback import com.magic.mogo.och.charter.fragment.DriverM1Fragment import com.magic.mogo.och.charter.model.DriverM1Model import com.mogo.commons.mvp.Presenter import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo -import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean import com.mogo.och.common.module.biz.callback.ILoginCallback +import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager.OPERATION_ROAD_SIDE_TYPE import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin +import com.mogo.och.common.module.manager.OCHPlanningStopSideStatusManager +import com.mogo.och.common.module.utils.DateTimeUtil /** * @author: wangmingjun @@ -23,7 +27,8 @@ import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin */ class DriverM1Presenter(view: DriverM1Fragment?) : Presenter(view),ILoginCallback, DriverM1OrderCallback, ChangeDestCallback, - IMoGoAutopilotStatusListener { + IMoGoAutopilotStatusListener, OCHPlanningStopSideStatusManager.OCHPlanningActionsCallback, + IDriverM1ControllerStatusCallback { private val TAG = DriverM1Presenter::class.java.name private var mCurrentAutopilotStatus : Int = -1 @@ -36,13 +41,18 @@ class DriverM1Presenter(view: DriverM1Fragment?) : private fun registerListener() { //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 CallerAutoPilotStatusListenerManager.addListener(TAG, this) + OCHPlanningStopSideStatusManager.addListener(TAG,this) DriverM1Model.get().setDriverM1OrderCallback(this) DriverM1Model.get().setChangeDestCallback(this) + DriverM1Model.get().setControllerStatusCallback(this) } private fun releaseListener() { + OCHPlanningStopSideStatusManager.removeListener(TAG) + CallerAutoPilotStatusListenerManager.removeListener(TAG) DriverM1Model.get().setDriverM1OrderCallback(null) DriverM1Model.get().setChangeDestCallback(null) + DriverM1Model.get().setControllerStatusCallback(null) } override fun onDestroy(owner: LifecycleOwner) { @@ -127,4 +137,32 @@ class DriverM1Presenter(view: DriverM1Fragment?) : // } // } } + + override fun onStartAutopilotFailure( + actionStatus: OCHPlanningStopSideStatusManager.Status, + stopSideStatus: Boolean?, + errorInfo: String? + ) { + when (actionStatus) { + OCHPlanningStopSideStatusManager.Status.START -> { // 靠边停车 to 消息盒子 + DriverM1Model.get().pushOperationalToMsgBox( + DateTimeUtil.getCurrentTimeStamp(), + "", + OPERATION_ROAD_SIDE_TYPE + ) + } + } + } + + override fun startOpenAutopilot() { + ThreadUtils.runOnUiThread { + mView?.startAutopilotAnimation() + } + } + + override fun onStartAdasFailure() { + ThreadUtils.runOnUiThread { + mView?.stopAnimAndUpdateBtnStatus() + } + } } diff --git a/OCH/mogo-och-charter/src/driverm1/res/raw/bus_di.mp3 b/OCH/mogo-och-charter/src/driverm1/res/raw/bus_di.mp3 deleted file mode 100644 index 15b31ed247d4390b1d571976c4f05d7d3da1571b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15150 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 w<=LtEOaJJt%2@k{4eiMKgITNo8$iX11poj5 diff --git a/OCH/mogo-och-charter/src/driverm1/res/raw/m1_voice_di.mp3 b/OCH/mogo-och-charter/src/driverm1/res/raw/m1_voice_di.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..191886658cd0c2c103e6ae736b65d9136c7dbdc2 GIT binary patch literal 46365 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 literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java b/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java deleted file mode 100644 index 6b5aa0e854..0000000000 --- a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.magic.mogo.och.charter.callback; - -/** - * Created on 2021/9/8 - * - * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) - */ -public interface IADASStatusCallback { - //自驾返回失败 - void onStartAdasFailure(); -} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt index 4418cf569a..d130f49741 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt @@ -7,9 +7,9 @@ package com.mogo.och.common.module.bean.dpmsg data class ChangeDestMsg( var lineId: Int, //线路id var lineName: String = "", //线路名称 - var startSiteId: Int=0, //当前站点 + var startSiteId: Int= 0, //当前站点 var startSiteName: String = "", - var destSiteId: Int=0, //目的地 + var destSiteId: Int= 0, //目的地 var destSiteName: String = "", var isConfirmed: Boolean = false //司机端是否同意 ): BaseDPMsg(DPMsgType.TYPE_CHANGE_DEST.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt new file mode 100644 index 0000000000..af7badf1fa --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt @@ -0,0 +1,9 @@ +package com.mogo.och.common.module.bean.dpmsg + +/** + * @author: wangmingjun + * @date: 2023/2/24 + */ +data class DPCommonOperationMsg( + var msg: String +): BaseDPMsg(DPMsgType.TYPE_COMMON.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt index 20b8443827..30a4f2c3b4 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt @@ -6,4 +6,4 @@ package com.mogo.och.common.module.bean.dpmsg */ data class DPOperateDoorMsg( var open: Boolean = false // true: 开门, false: 关门 -): BaseDPMsg(DPMsgType.TYPE_CHANGE_DEST.type) +): BaseDPMsg(DPMsgType.TYPE_OPEN_CLOSE_DOOR.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt index 1b5e4c5a15..5785b9500b 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt @@ -6,4 +6,4 @@ package com.mogo.och.common.module.bean.dpmsg */ data class DPOrderClosedMsg( var closed: Boolean = true // true: 开门, false: 关门 -): BaseDPMsg(DPMsgType.TYPE_CHANGE_DEST.type) +): BaseDPMsg(DPMsgType.TYPE_ORDER_CLOSED.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt index 443ad5469d..76fc2a39f1 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt @@ -12,10 +12,14 @@ import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager * 统一管理业务长链消息推送 */ object OCHSocketMessageManager { - public const val msgMonitorType:Int = 6295553 //后台运营消息 - public const val msgWriteOffPassengerType:Int = 6295554 //核销消息 - public const val msgOperateDoorType = 6295554 // 开/关门消息 - public const val msgOrderClosedType = 6295555 //订单结束消息 + const val msgMonitorType:Int = 6295553 //后台运营消息 + const val msgWriteOffPassengerType:Int = 6295554 //核销消息 + const val msgOperateDoorType = 6295554 // 开/关门消息 + const val msgOrderClosedType = 6295555 //订单结束消息 + + const val OPERATION_SYSTEM: Int = -1 // 运营消息 默认是次消息类型 + const val OPERATION_ORDER_TYPE: Int = 0 // 还车通知 + const val OPERATION_ROAD_SIDE_TYPE: Int = 1 //靠边停车通知 fun registerSocketMessageListener(msgType:Int, mogoOnMessageListener :IMogoOnMessageListener){ @@ -28,8 +32,9 @@ object OCHSocketMessageManager { .unregisterLifecycleListener(msgType) } - fun pushAppOperationalMsgBox(time : Long,content : String){ + fun pushAppOperationalMsgBox(time : Long,content : String,type: Int = -1){ + CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.OPERATION, - OperationMsg(time,content))); + OperationMsg(time,content,type))) } } \ No newline at end of file