From e0836a0170f346b9407672fdb44654eb7c9fb542 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Mon, 12 May 2025 17:10:21 +0800 Subject: [PATCH] =?UTF-8?q?[8.0.0]=20[fea]=20[=E4=B8=8A=E6=8A=A5=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E5=88=B0nde]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/layout/biz_login_business_view.xml | 2 +- .../com/mogo/och/bridge/BridgeProvider.kt | 6 +++ .../mogo/och/bridge/BridgeServiceManager.kt | 3 ++ .../bridge/trajectory/TrajectoryManager.kt | 2 + .../module/biz/birdge/BridgeListener.kt | 2 + .../common/module/constant/OchCommonConst.kt | 5 ++ .../mogo/och/common/module/ExampleUnitTest.kt | 17 +++++-- .../passenger/bean/ai/AiTrajectoryReqBean.kt | 5 ++ .../unmanned/passenger/bean/ai/LatLonBody.kt | 20 ++++++++ .../passenger/network/ai/AiServiceApi.kt | 29 +++++++++++ .../passenger/network/ai/AiServiceManager.kt | 51 +++++++++++++++++++ .../passenger/ui/aiview/AIViewModel.kt | 37 +++++++++++++- 12 files changed, 172 insertions(+), 7 deletions(-) create mode 100644 OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/AiTrajectoryReqBean.kt create mode 100644 OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/LatLonBody.kt create mode 100644 OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceApi.kt create mode 100644 OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceManager.kt diff --git a/OCH/common/biz/src/main/res/layout/biz_login_business_view.xml b/OCH/common/biz/src/main/res/layout/biz_login_business_view.xml index 5e7f8690bb..6125e8cca2 100644 --- a/OCH/common/biz/src/main/res/layout/biz_login_business_view.xml +++ b/OCH/common/biz/src/main/res/layout/biz_login_business_view.xml @@ -2,7 +2,7 @@ diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt index c2e4723ba4..54f444b221 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt @@ -86,5 +86,11 @@ class BridgeProvider : BridgeService, CallerBase() { } } + fun invokeTrajectoryPointAndDistance(trajectoryList: MutableList,distance:Double){ + M_LISTENERS.forEach { + it.value.onTrajectoryPointsAndDistanceListener(trajectoryList, distance) + } + } + } \ No newline at end of file diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt index b342e14e28..a95de0c11a 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt @@ -69,5 +69,8 @@ object BridgeServiceManager { fun invokeTrajectoryDistance(distance:Double){ this.bridgeService?.invokeTrajectoryDistance(distance) } + fun invokeTrajectoryPointsAndDistance(trajectoryList: MutableList,distance:Double){ + this.bridgeService?.invokeTrajectoryPointAndDistance(trajectoryList, distance) + } } \ No newline at end of file diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/trajectory/TrajectoryManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/trajectory/TrajectoryManager.kt index 18d9d98855..b0a0e4b573 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/trajectory/TrajectoryManager.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/trajectory/TrajectoryManager.kt @@ -94,6 +94,7 @@ object TrajectoryManager : CallerBase(), 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(), IMoGoPlanningR fun doSomeAfterBridgeListener(){ BridgeServiceManager.invokeTrajectoryPoints(mRoutePoints) BridgeServiceManager.invokeTrajectoryDistance(maxDistanceAllPoint) + BridgeServiceManager.invokeTrajectoryPointsAndDistance(mRoutePoints,maxDistanceAllPoint) } private fun addDownLoadSuccessLine(lineId: Long) { diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt index 8b1b2f8766..14b452a186 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt @@ -13,4 +13,6 @@ interface BridgeListener { fun onTrajectoryPointsListener(trajectoryList: MutableList){} fun onTrajectoryDistanceListener(distance: Double){} + + fun onTrajectoryPointsAndDistanceListener(trajectoryList: MutableList,distance: Double){} } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt index e610372125..4bfbcd21d4 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt @@ -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 diff --git a/OCH/common/common/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt b/OCH/common/common/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt index a42f0cf7f2..d8ec188e28 100644 --- a/OCH/common/common/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt +++ b/OCH/common/common/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt @@ -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 diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/AiTrajectoryReqBean.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/AiTrajectoryReqBean.kt new file mode 100644 index 0000000000..48e6efcae9 --- /dev/null +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/AiTrajectoryReqBean.kt @@ -0,0 +1,5 @@ +package com.mogo.och.unmanned.passenger.bean.ai + +data class AiTrajectoryReqBean( + val points: List, val sn: String, val ending:String = "0" +) \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/LatLonBody.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/LatLonBody.kt new file mode 100644 index 0000000000..3f39891b63 --- /dev/null +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/ai/LatLonBody.kt @@ -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): MutableList { + val result = mutableListOf() + trajectoryList.forEach { + result.add(LatLonBody(it.latitude,it.longitude)) + } + return result + } + } +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceApi.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceApi.kt new file mode 100644 index 0000000000..c0c8a1968a --- /dev/null +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceApi.kt @@ -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 + +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceManager.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceManager.kt new file mode 100644 index 0000000000..b43b96f006 --- /dev/null +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/network/ai/AiServiceManager.kt @@ -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, + callback: OchCommonServiceCallback? + ) { + + 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")) + } + + + +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AIViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AIViewModel.kt index 140564b2b9..742fad0566 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AIViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AIViewModel.kt @@ -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) { + override fun onTrajectoryPointsAndDistanceListener( + trajectoryList: MutableList, + distance: Double + ) { + if(trajectoryList.size>2&&distance<40_000){ + AiServiceManager.uploadTrajectory("0",LatLonBody.toLatLonBody(trajectoryList),object :OchCommonServiceCallback{ + 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{ + override fun onSuccess(data: BaseData?) { + OchChainLogManager.writeChainLogTrajectory("nde日志","删除向nde上报轨迹成功") + } + + override fun onFail(code: Int, msg: String?) { + OchChainLogManager.writeChainLogTrajectory("nde日志","删除轨迹轨迹上报失败") + } + + }) } }