[charter m1] 轨迹下载修复

This commit is contained in:
wangmingjun
2023-03-02 19:52:24 +08:00
parent 0466ef4ce9
commit db8dd83c30
9 changed files with 243 additions and 12 deletions

View File

@@ -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默认“”

View File

@@ -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;

View File

@@ -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

View File

@@ -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
)
}
}

View File

@@ -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
}
}

View File

@@ -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()
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -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" />
</RelativeLayout>
<RelativeLayout
@@ -292,7 +292,7 @@
android:layout_height="@dimen/dp_80"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:src="@drawable/ai_collect_selector" />
android:src="@drawable/icon_ai_collect" />
</RelativeLayout>
<Button