[fea]
[上报轨迹到nde]
This commit is contained in:
yangyakun
2025-05-12 17:10:21 +08:00
parent 850d70a147
commit e0836a0170
12 changed files with 172 additions and 7 deletions

View File

@@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/dp_200"
android:layout_width="@dimen/dp_300"
android:layout_height="@dimen/dp_680"
android:orientation="vertical"
android:background="@drawable/biz_login_error_info">

View File

@@ -86,5 +86,11 @@ class BridgeProvider : BridgeService, CallerBase<BridgeListener>() {
}
}
fun invokeTrajectoryPointAndDistance(trajectoryList: MutableList<MogoLocation>,distance:Double){
M_LISTENERS.forEach {
it.value.onTrajectoryPointsAndDistanceListener(trajectoryList, distance)
}
}
}

View File

@@ -69,5 +69,8 @@ object BridgeServiceManager {
fun invokeTrajectoryDistance(distance:Double){
this.bridgeService?.invokeTrajectoryDistance(distance)
}
fun invokeTrajectoryPointsAndDistance(trajectoryList: MutableList<MogoLocation>,distance:Double){
this.bridgeService?.invokeTrajectoryPointAndDistance(trajectoryList, distance)
}
}

View File

@@ -94,6 +94,7 @@ object TrajectoryManager : CallerBase<ITrajectoryListListener>(), IMoGoPlanningR
}
BridgeServiceManager.invokeTrajectoryPoints(mRoutePoints)
BridgeServiceManager.invokeTrajectoryDistance(maxDistanceAllPoint)
BridgeServiceManager.invokeTrajectoryPointsAndDistance(mRoutePoints,maxDistanceAllPoint)
}
override fun doSomeAfterAddListener(tag: String, listener: ITrajectoryListListener) {
@@ -110,6 +111,7 @@ object TrajectoryManager : CallerBase<ITrajectoryListListener>(), IMoGoPlanningR
fun doSomeAfterBridgeListener(){
BridgeServiceManager.invokeTrajectoryPoints(mRoutePoints)
BridgeServiceManager.invokeTrajectoryDistance(maxDistanceAllPoint)
BridgeServiceManager.invokeTrajectoryPointsAndDistance(mRoutePoints,maxDistanceAllPoint)
}
private fun addDownLoadSuccessLine(lineId: Long) {

View File

@@ -13,4 +13,6 @@ interface BridgeListener {
fun onTrajectoryPointsListener(trajectoryList: MutableList<MogoLocation>){}
fun onTrajectoryDistanceListener(distance: Double){}
fun onTrajectoryPointsAndDistanceListener(trajectoryList: MutableList<MogoLocation>,distance: Double){}
}

View File

@@ -25,6 +25,11 @@ class OchCommonConst {
return FunctionBuildConfig.urlJson.eagleMisUrl
}
@JvmStatic
fun getAiUrl():String{
return FunctionBuildConfig.urlJson.ndeUrl
}
// token 失效 重新获取token
const val WAIT_TAKEN = 100046

View File

@@ -1,6 +1,7 @@
package com.mogo.och.common.module
import com.google.gson.reflect.TypeToken
import com.mogo.eagle.core.network.utils.digest.DigestUtils
import com.mogo.eagle.core.utilcode.util.CoordinateTransform
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.utilcode.util.GsonUtils
@@ -29,13 +30,19 @@ class ExampleUnitTest {
}
@Test
fun testData() {
for(time in 0 until 7200){
val second2Time = DateTimeUtil.second2Time(time.toLong())
val mogoReqTime = System.currentTimeMillis().toString()
val encodedPath = "/vehicleLocation/location/navigationLocationPoints".toUpperCase()
val listSplit = second2Time.split(":")
val mogoAuthKey = DigestUtils.md5Hex(encodedPath+ mogoReqTime)
println("mogoReqTime:${mogoReqTime}----mogoAuthKey${mogoAuthKey}")
println("${listSplit[0]}时:${listSplit[1]}")
}
// for(time in 0 until 7200){
// val second2Time = DateTimeUtil.second2Time(time.toLong())
//
// val listSplit = second2Time.split(":")
//
// println("${listSplit[0]}时:${listSplit[1]}分")
// }
}
@Test

View File

@@ -0,0 +1,5 @@
package com.mogo.och.unmanned.passenger.bean.ai
data class AiTrajectoryReqBean(
val points: List<LatLonBody>, val sn: String, val ending:String = "0"
)

View File

@@ -0,0 +1,20 @@
package com.mogo.och.unmanned.passenger.bean.ai
import com.mogo.eagle.core.data.map.MogoLocation
/**
* Create by wyy
* TIME : 2024/6/25 \ 15:21
* Description:
*/
data class LatLonBody(val lat: Double, val lon: Double){
companion object{
fun toLatLonBody(trajectoryList: MutableList<MogoLocation>): MutableList<LatLonBody> {
val result = mutableListOf<LatLonBody>()
trajectoryList.forEach {
result.add(LatLonBody(it.latitude,it.longitude))
}
return result
}
}
}

View File

@@ -0,0 +1,29 @@
package com.mogo.och.unmanned.passenger.network.ai
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.BaseData
import com.mogo.och.unmanned.passenger.bean.ai.AiTrajectoryReqBean
import io.reactivex.Observable
import retrofit2.http.Body
import retrofit2.http.Header
import retrofit2.http.Headers
import retrofit2.http.POST
/**
* Created by pangfan on 2021/8/19
*
* 网约车-出租车接口定义
*/
internal interface AiServiceApi {
@Headers("Content-type:application/json;charset=UTF-8")
@POST("/vehicleLocation/location/navigationLocationPoints")
fun navigationLocationPoints(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String = SharedPrefsMgr.getInstance().token,
@Header("MogoReqTime") mogoReqTime:String,
@Header("MogoAuthKey") MogoAuthKey:String,
@Body data: AiTrajectoryReqBean?
): Observable<BaseData>
}

View File

@@ -0,0 +1,51 @@
package com.mogo.och.unmanned.passenger.network.ai
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.network.MoGoRetrofitFactory
import com.mogo.eagle.core.network.utils.digest.DigestUtils
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.network.OchCommonSubscribeImpl
import com.mogo.och.common.module.network.interceptor.transformTry
import com.mogo.och.unmanned.passenger.bean.ai.AiTrajectoryReqBean
import com.mogo.och.unmanned.passenger.bean.ai.LatLonBody
import com.mogo.och.unmanned.passenger.network.TaxiPassengerServiceManager
/**
* Created by pangfan on 2021/8/19
*/
object AiServiceManager {
private val mOCHTaxiServiceApi: AiServiceApi =
MoGoRetrofitFactory.getInstance(OchCommonConst.getAiUrl())
.create(AiServiceApi::class.java)
private const val TAG = "TaxiPassengerServiceManager"
/**
* 根据订单号查询订单, 主要是拿完成或者被乘客取消的订单状态
*/
@JvmStatic
fun uploadTrajectory(
ending:String = "0",
points: List<LatLonBody>,
callback: OchCommonServiceCallback<BaseData>?
) {
val mogoReqTime = System.currentTimeMillis().toString()
val encodedPath = "/vehicleLocation/location/navigationLocationPoints".toUpperCase()
val mogoAuthKey = DigestUtils.md5Hex(encodedPath+ mogoReqTime)
mOCHTaxiServiceApi.navigationLocationPoints(
data = AiTrajectoryReqBean(points, SharedPrefsMgr.getInstance().sn+"_PAD", ending),
mogoReqTime = mogoReqTime,
MogoAuthKey = mogoAuthKey
).transformTry()
.subscribe(OchCommonSubscribeImpl(TaxiPassengerServiceManager.context, callback, "navigationLocationPoints"))
}
}

View File

@@ -3,6 +3,7 @@ package com.mogo.och.unmanned.passenger.ui.aiview
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.data.ai.V2XRepository
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
@@ -16,8 +17,12 @@ import com.mogo.mgintelligent.speech.iflytek.WakeUpManager
import com.mogo.och.bridge.autopilot.location.OchLocationManager
import com.mogo.och.common.module.biz.birdge.BridgeListener
import com.mogo.och.common.module.biz.birdge.BridgeManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.data.taxi.BaseOrderBean
import com.mogo.och.data.taxi.TaxiOrderStatusEnum
import com.mogo.och.unmanned.passenger.bean.ai.LatLonBody
import com.mogo.och.unmanned.passenger.network.ai.AiServiceManager
import com.mogo.och.unmanned.taxi.utils.order.OrderListener
import com.mogo.och.unmanned.taxi.utils.order.OrderModel
import com.mogo.service.v2n.bean.MGLlmQueryBean
@@ -74,6 +79,9 @@ class AIViewModel : ViewModel(), AIMessageManager.AIMessageListener, IWakeUpList
_messagesFlow.value = msgList.toList()
}
}
if(order==null){
clearNdeTra()
}
}
}
@@ -335,8 +343,35 @@ class AIViewModel : ViewModel(), AIMessageManager.AIMessageListener, IWakeUpList
}
override fun onTrajectoryPointsListener(trajectoryList: MutableList<MogoLocation>) {
override fun onTrajectoryPointsAndDistanceListener(
trajectoryList: MutableList<MogoLocation>,
distance: Double
) {
if(trajectoryList.size>2&&distance<40_000){
AiServiceManager.uploadTrajectory("0",LatLonBody.toLatLonBody(trajectoryList),object :OchCommonServiceCallback<BaseData>{
override fun onSuccess(data: BaseData?) {
OchChainLogManager.writeChainLogTrajectory("nde日志","获取到轨迹向nde上报轨迹成功")
}
override fun onFail(code: Int, msg: String?) {
OchChainLogManager.writeChainLogTrajectory("nde日志","获取到轨迹轨迹上报失败")
}
})
}
}
private fun clearNdeTra() {
AiServiceManager.uploadTrajectory("1", mutableListOf(),object :OchCommonServiceCallback<BaseData>{
override fun onSuccess(data: BaseData?) {
OchChainLogManager.writeChainLogTrajectory("nde日志","删除向nde上报轨迹成功")
}
override fun onFail(code: Int, msg: String?) {
OchChainLogManager.writeChainLogTrajectory("nde日志","删除轨迹轨迹上报失败")
}
})
}
}