diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryRoutesResponse.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryRoutesResponse.kt index 551982e8f0..beefc3e293 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryRoutesResponse.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryRoutesResponse.kt @@ -9,6 +9,9 @@ import com.mogo.eagle.core.data.BaseData data class QueryRoutesResponse(var data: Result) : BaseData(){ data class Result( + + + var csvFileUrl : String = "" , var csvFileMd5 : String = "" ,//轨迹文件md5,默认“” diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterAnalyticsManager.java b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterAnalyticsManager.java similarity index 99% rename from OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterAnalyticsManager.java rename to OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterAnalyticsManager.java index 79cc939b0c..a3e54cc950 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterAnalyticsManager.java +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterAnalyticsManager.java @@ -1,4 +1,4 @@ -package com.magic.mogo.och.charter; +package com.magic.mogo.och.charter.manager; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterSendTripInfoManager.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterSendTripInfoManager.kt similarity index 97% rename from OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterSendTripInfoManager.kt rename to OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterSendTripInfoManager.kt index d347679366..a3efae98a1 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterSendTripInfoManager.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterSendTripInfoManager.kt @@ -1,4 +1,4 @@ -package com.magic.mogo.och.charter +package com.magic.mogo.och.charter.manager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterTrajectoryManager.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterTrajectoryManager.kt new file mode 100644 index 0000000000..241d2edda3 --- /dev/null +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterTrajectoryManager.kt @@ -0,0 +1,210 @@ +package com.magic.mogo.och.charter.manager + +import com.magic.mogo.och.charter.constant.CharterConst +import com.magic.mogo.och.charter.model.DriverM1Model.Companion.get +import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLine +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.sendTrajectoryDownloadReq +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.zhidao.socket.utils.LoginStatusUtil +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.functions.Function +import io.reactivex.schedulers.Schedulers +import mogo_msg.MogoReportMsg.MogoReportMessage +import java.util.concurrent.TimeUnit + +/** + * Bus轨迹管理:给MEC下发用于轨迹下载的信息 + * Created on 2022/6/23 + */ +object CharterTrajectoryManager { + + private const val TAG = "CharterTrajectoryManager" + private var mAutoPilotLine: AutoPilotLine? = null + private var mLineId = 0 + private var mSendReqDisposable: Disposable? = null + + /** + * 同步Bus路线信息 + */ + fun syncTrajectoryInfo(lineId: Int) { + mLineId = lineId + val routesResult = get().getBusRoutesResult() + if (LoginStatusUtil.isLogin() && routesResult != null) { + d(SceneConstant.M_CHARTER_D + TAG, "syncTrajectoryInfo() start.") + startTrajReqLoop() + } else { + // 无路线信息or当前未在始发站 + d(SceneConstant.M_CHARTER_D + TAG, "syncTrajectoryInfo() stop.") + stopTrajReqLoop() + } + } + + /** + * 接口MEC反馈的常规信息(MAP v2.5.0新增轨迹相关信息) + * @param guardianInfo + */ + fun onAutopilotGuardian(guardianInfo: MogoReportMessage?) { + if (guardianInfo == null || !guardianInfo.hasCode()) return + if ("ISYS_INIT_TRAJECTORY_START" == guardianInfo.code) { + // 1. 轨迹管理_轨迹开始下载(本地已有对应轨迹也触发) + d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() 轨迹开始下载") + // ToastUtils.showShort("轨迹开始下载"); + stopTrajReqLoop() + } else if ("ISYS_INIT_TRAJECTORY_SUCCESS" == guardianInfo.code) { + // 2. 轨迹管理_轨迹下载成功(本地已有对应轨迹也触发) + d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() 轨迹下载成功") + // ToastUtils.showShort("轨迹下载成功"); + stopTrajReqLoop() + } else if ("ISYS_INIT_TRAJECTORY_FAILURE" == guardianInfo.code) { + // 3. 轨迹管理_轨迹下载失败,本地无对应轨迹 + d( + SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() " + + "轨迹下载失败,本地无对应轨迹" + ) + // ToastUtils.showShort("轨迹下载失败,本地无对应轨迹"); + } else if ("ISYS_INIT_TRAJECTORY_WARNING" == guardianInfo.code) { + // 4. 轨迹管理_轨迹下载失败,本地有对应轨迹,认为成功 + d( + SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() " + + "轨迹下载失败,本地有对应轨迹,认为成功" + ) + // ToastUtils.showShort("轨迹下载失败,本地有对应轨迹,认为成功"); + } else if ("ISYS_INIT_TRAJECTORY_TIMEOUT" == guardianInfo.code) { + // 5. 轨迹管理_轨迹下载超时 + d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() 轨迹下载超时") + // ToastUtils.showShort("轨迹下载超时"); + } + } + + private fun setupAutoPilotLine() { + val routesResult = get().getBusRoutesResult() + if (routesResult == null) { + e( + SceneConstant.M_CHARTER_D + TAG, + "setupAutoPilotLine(): routesResult is null." + ) + return + } else { + if (mAutoPilotLine == null) { + mAutoPilotLine = AutoPilotLine( + mLineId.toLong(), + routesResult.csvFileUrl, routesResult.csvFileMd5, + routesResult.txtFileUrl, routesResult.txtFileMd5, + routesResult.contrailSaveTime, routesResult.carModel, + routesResult.csvFileUrlDPQP, routesResult.csvFileMd5DPQP, + routesResult.txtFileUrlDPQP, routesResult.txtFileMd5DPQP, + routesResult.contrailSaveTimeDPQP + ) + } else { + mAutoPilotLine!!.lineId = mLineId.toLong() + mAutoPilotLine!!.trajUrl = routesResult.csvFileUrl + mAutoPilotLine!!.trajMd5 = routesResult.csvFileMd5 + mAutoPilotLine!!.stopUrl = routesResult.txtFileUrl + mAutoPilotLine!!.stopMd5 = routesResult.txtFileMd5 + mAutoPilotLine!!.timestamp = routesResult.contrailSaveTime + mAutoPilotLine!!.vehicleModel = routesResult.carModel + mAutoPilotLine!!.trajUrl_dpqp = routesResult.csvFileUrlDPQP + mAutoPilotLine!!.trajMd5_dpqp = routesResult.csvFileMd5DPQP + mAutoPilotLine!!.stopUrl_dpqp = routesResult.txtFileUrlDPQP + mAutoPilotLine!!.stopMd5_dpqp = routesResult.txtFileMd5DPQP + mAutoPilotLine!!.timestamp_dpqp = routesResult.contrailSaveTimeDPQP + } + } + } + + private fun clearAutoPilotLine() { + if (mAutoPilotLine == null) return + mAutoPilotLine!!.lineId = -1 + mAutoPilotLine!!.trajUrl = "" + mAutoPilotLine!!.trajMd5 = "" + mAutoPilotLine!!.stopUrl = "" + mAutoPilotLine!!.stopMd5 = "" + mAutoPilotLine!!.timestamp = 0 + mAutoPilotLine!!.vehicleModel = "" + mAutoPilotLine!!.trajUrl_dpqp = "" + mAutoPilotLine!!.trajMd5_dpqp = "" + mAutoPilotLine!!.stopUrl_dpqp = "" + mAutoPilotLine!!.stopMd5_dpqp = "" + mAutoPilotLine!!.timestamp_dpqp = 0 + } + + private fun startTrajReqLoop() { + if (mSendReqDisposable != null && !mSendReqDisposable!!.isDisposed) { + return + } + d(SceneConstant.M_CHARTER_D + TAG, "startTrajReqLoop()") + setupAutoPilotLine() + mSendReqDisposable = Observable.interval( + CharterConst.LOOP_DELAY, + CharterConst.LOOP_PERIOD_10S, TimeUnit.MILLISECONDS + ) + .map(Function { aLong: Long -> aLong + 1 }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { aLong: Long -> + if (aLong > CharterConst.LOOP_SEND_TRAJ_TIMES) { + stopTrajReqLoop() + return@subscribe + } + d( + SceneConstant.M_CHARTER_D + TAG, + "loop sendTrajectoryReq: $aLong" + ) + sendTrajectoryReq() + } + } + + fun stopTrajReqLoop() { + if (mSendReqDisposable != null) { + d(SceneConstant.M_CHARTER_D + TAG, "stopTrajReqLoop()") + mSendReqDisposable!!.dispose() + mSendReqDisposable = null + clearAutoPilotLine() + } + } + + private fun sendTrajectoryReq() { + if (mAutoPilotLine == null) { + e(SceneConstant.M_CHARTER_D + TAG, "sendTrajectoryReq(): mAutoPilotLine is null!!!") + return + } + + // TODO: 2022/6/24 + // test1 +// mAutoPilotLine.setLineId(148); +// mAutoPilotLine.setTrajUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/e27c20c2da32481021d934c3ef084536/traj_148.csv"); +// mAutoPilotLine.setTrajMd5("e27c20c2da32481021d934c3ef084536"); +// mAutoPilotLine.setStopUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/6224c9dd2c0e2bd990c6482c0464de45/stop_148.txt"); +// mAutoPilotLine.setStopMd5("6224c9dd2c0e2bd990c6482c0464de45"); +// mAutoPilotLine.setTimestamp(1654596000000L); //20220607 18:00 +// mAutoPilotLine.setVehicleModel("红旗H9"); + + // test2 +// mAutoPilotLine.setLineId(148); +// mAutoPilotLine.setTrajUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/8654497cf918be461a59c7ad8e22920d/traj_148.csv"); +// mAutoPilotLine.setTrajMd5("8654497cf918be461a59c7ad8e22920d"); +// mAutoPilotLine.setStopUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/1bb098b244922649bf3e7bada0d3950f/stop_148.txt"); +// mAutoPilotLine.setStopMd5("1bb098b244922649bf3e7bada0d3950f"); +// mAutoPilotLine.setTimestamp(1654761600000L); //20220609 16:00 +// mAutoPilotLine.setVehicleModel("红旗H9"); + sendTrajectoryDownloadReq(mAutoPilotLine!!) + d( + SceneConstant.M_CHARTER_D + TAG, + "sendTrajectoryReq(): " + + GsonUtils.toJson(mAutoPilotLine) + ) + } + + init { + mAutoPilotLine = AutoPilotLine( + -1, + "", "", "", "", 0, "", + "", "", "", "", 0 + ) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt index 159e276423..6b036fe6e1 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt @@ -6,11 +6,11 @@ import com.alibaba.android.arouter.launcher.ARouter import com.alibaba.android.arouter.utils.TextUtils import com.amap.api.maps.model.LatLng import com.elegant.network.utils.GsonUtil -import com.magic.mogo.och.charter.CharterAnalyticsManager -import com.magic.mogo.och.charter.CharterSendTripInfoManager -import com.magic.mogo.och.charter.CharterSendTripInfoManager.ARRIVE_STATION -import com.magic.mogo.och.charter.CharterSendTripInfoManager.END_TRIP -import com.magic.mogo.och.charter.CharterSendTripInfoManager.START_TRIP +import com.magic.mogo.och.charter.manager.CharterAnalyticsManager +import com.magic.mogo.och.charter.manager.CharterSendTripInfoManager +import com.magic.mogo.och.charter.manager.CharterSendTripInfoManager.ARRIVE_STATION +import com.magic.mogo.och.charter.manager.CharterSendTripInfoManager.END_TRIP +import com.magic.mogo.och.charter.manager.CharterSendTripInfoManager.START_TRIP import com.magic.mogo.och.charter.R import com.magic.mogo.och.charter.bean.CheckOrderCountDownResponse import com.magic.mogo.och.charter.bean.QueryBusinessStatusResponse @@ -20,6 +20,7 @@ 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.constant.CharterConst +import com.magic.mogo.och.charter.manager.CharterTrajectoryManager import com.magic.mogo.och.charter.net.DriverM1ServiceManager import com.mogo.aicloud.services.socket.IMogoOnMessageListener import com.mogo.commons.module.intent.IMogoIntentListener @@ -701,6 +702,7 @@ class DriverM1Model { d(SceneConstant.M_CHARTER_D + TAG, "checkoutContrail-==" + GsonUtils.toJson(data.data)) mCurrentRoute = data.data + CharterTrajectoryManager.syncTrajectoryInfo(mCurrentOrder?.lineId!!) } override fun onFail(code: Int, msg: String?) { @@ -714,4 +716,10 @@ class DriverM1Model { if (isArrivedStation) return onArriveAt() } + + fun getBusRoutesResult(): QueryRoutesResponse.Result?{ + if (mCurrentOrder == null) return null + + return mCurrentRoute + } } \ No newline at end of file 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 1393aaf830..cf23dc8ca3 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 @@ -1,13 +1,13 @@ package com.magic.mogo.och.charter.presenter import androidx.lifecycle.LifecycleOwner -import com.magic.mogo.och.charter.CharterAnalyticsManager import com.magic.mogo.och.charter.R 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.manager.CharterTrajectoryManager import com.magic.mogo.och.charter.model.DriverM1Model import com.mogo.commons.mvp.Presenter import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo @@ -19,10 +19,12 @@ 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 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 import mogo.telematics.pad.MessagePad +import mogo_msg.MogoReportMsg /** * @author: wangmingjun @@ -66,8 +68,12 @@ class DriverM1Presenter(view: DriverM1Fragment?) : override fun loginSuccess(data: DriverStatusQueryRespBean?) { d(SceneConstant.M_BUS + TAG, " loginStatus =" + isLogin()) - // 查询服务状态 - DriverM1Model.get().queryCurrentServiceStatus() + if(isLogin()){ + // 查询服务状态 + DriverM1Model.get().queryCurrentServiceStatus() + }else{ + CharterTrajectoryManager.stopTrajReqLoop() + } } override fun loginFail(isLogin: Boolean) { @@ -119,6 +125,10 @@ class DriverM1Presenter(view: DriverM1Fragment?) : ,context.getString(R.string.last_5_minutes)) } + override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) { + CharterTrajectoryManager.onAutopilotGuardian(guardianInfo) + } + override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) { DriverM1Model.get().onAutopilotArriveAtStation() } diff --git a/OCH/mogo-och-charter/src/main/res/drawable-xhdpi/icon_ai_collect.png b/OCH/mogo-och-charter/src/main/res/drawable-xhdpi/icon_ai_collect.png new file mode 100755 index 0000000000..6da7b81fe4 Binary files /dev/null and b/OCH/mogo-och-charter/src/main/res/drawable-xhdpi/icon_ai_collect.png differ diff --git a/OCH/mogo-och-charter/src/main/res/drawable-xhdpi/icon_bad_case.png b/OCH/mogo-och-charter/src/main/res/drawable-xhdpi/icon_bad_case.png new file mode 100755 index 0000000000..22f88301f9 Binary files /dev/null and b/OCH/mogo-och-charter/src/main/res/drawable-xhdpi/icon_bad_case.png differ diff --git a/OCH/mogo-och-charter/src/main/res/layout/charter_base_fragment.xml b/OCH/mogo-och-charter/src/main/res/layout/charter_base_fragment.xml index 9d79f5934a..f9d1e84554 100644 --- a/OCH/mogo-och-charter/src/main/res/layout/charter_base_fragment.xml +++ b/OCH/mogo-och-charter/src/main/res/layout/charter_base_fragment.xml @@ -273,7 +273,7 @@ android:layout_height="@dimen/dp_80" android:layout_centerInParent="true" android:layout_gravity="center" - android:src="@drawable/bad_case_selector" /> + android:src="@drawable/icon_bad_case" /> + android:src="@drawable/icon_ai_collect" />