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