From 150e30f635a1bc3e229f0ec095596a5daae73fc5 Mon Sep 17 00:00:00 2001 From: EmArrow Date: Mon, 17 Jun 2024 18:59:28 +0800 Subject: [PATCH] [6.5.0] add nde interface and func --- .../roadcross/RoadCrossCameraManager.kt | 40 +++++++++++++------ .../roadcross/net/INDERoadCameraApiService.kt | 21 +++++----- .../net/NDERoadCameraNetWorkModel.kt | 35 +++++++++++----- .../eagle/core/data/road/RoadCameraLive.kt | 8 ++++ .../eagle/core/data/road/RoadCrossCamera.kt | 16 ++++++++ .../mogo/eagle/core/network/CoroutineDSL.kt | 3 -- 6 files changed, 87 insertions(+), 36 deletions(-) create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCameraLive.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCrossCamera.kt diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt index c4fb24690c..add9c8038e 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt @@ -1,9 +1,11 @@ package com.mogo.eagle.core.function.business.roadcross import com.mogo.eagle.core.data.deva.chain.ChainConstant -import com.mogo.eagle.core.function.business.roadcross.net.NDERoadCameraNetWorkModel +import com.mogo.eagle.core.data.road.CameraDeviceInfo +import com.mogo.eagle.core.function.business.roadcross.net.NDERoadCameraNetWorkModel.Companion.ndeRoadCameraNetWorkModel import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.zhidaoauto.map.data.road.RoadCross import com.zhidaoauto.map.data.road.StopLine import com.zhjt.service.chain.ChainLog @@ -21,24 +23,36 @@ class RoadCrossCameraManager : CallerMapRoadListenerManager.OnRoadListener { @Volatile private var isCameraRequest = false - - private val ndeRoadCameraNetWorkModel = NDERoadCameraNetWorkModel() + @Volatile + private var roadCrossCameraList:List? = null fun init() { CallerMapRoadListenerManager.registerRoadListener(TAG, this) } + //todo 记录方法执行时间 private var distance: Double by Delegates.observable(0.0) { _, _, newV -> if (!isCameraRequest && newV < 100) { isCameraRequest = true - val roadCross = CallerMapRoadListenerManager.getCrossInfo() - if (roadCross != null) { - ndeRoadCameraNetWorkModel.getRoadCrossInfo(roadCross.cross_id_end) + val roadCrossEnd = CallerMapRoadListenerManager.getCrossInfo()?.cross_id_end + val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + if (roadCrossEnd != null) { + ndeRoadCameraNetWorkModel.getRoadCrossInfo(roadCrossEnd, loc.longitude, loc.latitude, onSuccess = { + // 地图上打marker(注意marker方向),marker点击获取对应ip + if(it.roadUniqueId != null && it.roadUniqueId == roadCrossEnd){ + roadCrossCameraList = it.deviceInfoList + UiThreadHandler.post { + + } + }else{ + + } + }, onError = { + + }) } else { - val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() roadCrossTrace( - TAG, - mapOf( + TAG, mapOf( "errorMsg" to "roadCross is null", "lat" to loc.latitude, "lon" to loc.longitude @@ -55,10 +69,12 @@ class RoadCrossCameraManager : CallerMapRoadListenerManager.OnRoadListener { override fun onRoadChange(cross: Boolean, roadCross: RoadCross?) { super.onRoadChange(cross, roadCross) - // 进入路口 - if (cross) { - isCameraRequest = false + // 出路口 + if (!cross) { // 停止请求摄像头数据 + ndeRoadCameraNetWorkModel.cancelRequest("roadCross") + // 释放控制 + isCameraRequest = false } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/INDERoadCameraApiService.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/INDERoadCameraApiService.kt index a729d97db7..5e62465973 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/INDERoadCameraApiService.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/INDERoadCameraApiService.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.business.roadcross.net -import com.mogo.eagle.core.data.Response +import com.mogo.eagle.core.data.BaseResponse +import com.mogo.eagle.core.data.road.RoadCrossCamera import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.Header @@ -8,23 +9,23 @@ import retrofit2.http.Headers import retrofit2.http.POST import retrofit2.http.Query -const val ROAD_CAMERA = "abilitySupport/rss/" +const val ROAD_CAMERA = "abilitySupport/rss/crossDevice" const val SINGLE_LIVE = "abilitySupport/rss/queryLive" const val BATCH_LIVE = "abilitySupport/rss/queryLiveAll" interface INDERoadCameraApiService { - // 获取路口处,路侧直播流设备ip地址(批量返回) todo post地址待给出 - @Headers("Content-type:application/json;charset=UTF-8") - @POST(ROAD_CAMERA) + // 获取路口处,路侧直播流设备ip地址(批量返回) + @GET(ROAD_CAMERA) suspend fun roadCameraRequest( @Header("MogoAuthKey") authKey: String, @Header("MogoReqTime") time: String, - @Body map: MutableMap - ): Response + @Query("roadUniqueId") roadId: String, + @Query("lon") lon: Double, + @Query("lat") lat: Double + ): BaseResponse // 单ip查询设备直播流与缩略图 - @Headers("Content-type:application/json;charset=UTF-8") @GET(SINGLE_LIVE) suspend fun cameraLiveSingleRequest( @Header("MogoAuthKey") authKey: String, @@ -32,7 +33,7 @@ interface INDERoadCameraApiService { @Query("ip") ip: String, @Query("lon") lon: Double, @Query("lat") lat: Double - ): Response + ): BaseResponse // 批量ip查询设备直播流与缩略图 @Headers("Content-type:application/json;charset=UTF-8") @@ -41,6 +42,6 @@ interface INDERoadCameraApiService { @Header("MogoAuthKey") authKey: String, @Header("MogoReqTime") time: String, @Body map: MutableMap - ): Response + ): BaseResponse } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/NDERoadCameraNetWorkModel.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/NDERoadCameraNetWorkModel.kt index d01be8d8f0..70248faafe 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/NDERoadCameraNetWorkModel.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/net/NDERoadCameraNetWorkModel.kt @@ -1,14 +1,16 @@ package com.mogo.eagle.core.function.business.roadcross.net import com.mogo.commons.constants.HostConst -import com.mogo.eagle.core.data.Response +import com.mogo.eagle.core.data.BaseResponse +import com.mogo.eagle.core.data.road.RoadCrossCamera import com.mogo.eagle.core.network.MoGoRetrofitFactory -import com.mogo.eagle.core.network.apiResponseCall +import com.mogo.eagle.core.network.apiCall +import com.mogo.eagle.core.network.cancel import com.mogo.eagle.core.network.request import com.mogo.eagle.core.utilcode.util.Md5Util import java.util.Locale -class NDERoadCameraNetWorkModel { +class NDERoadCameraNetWorkModel private constructor() { companion object { val ndeRoadCameraNetWorkModel by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { @@ -21,23 +23,34 @@ class NDERoadCameraNetWorkModel { .create(INDERoadCameraApiService::class.java) } - fun getRoadCrossInfo(crossID: String) { - request> { + fun getRoadCrossInfo( + crossID: String, + lon: Double, + lat: Double, + onSuccess: ((RoadCrossCamera) -> Unit), + onError: ((String) -> Unit) + ) { + request>("roadCross") { loader { - apiResponseCall { - val map = mutableMapOf() - map["crossID"] = crossID + apiCall { val time = System.currentTimeMillis().toString() val md5String = "${ROAD_CAMERA.uppercase(Locale.getDefault())}$time" - getNetWorkApi().roadCameraRequest(Md5Util.getMD5Result(md5String), time, map) + getNetWorkApi().roadCameraRequest( + Md5Util.getMD5Result(md5String), time, crossID, lon, lat + ) } } onSuccess { - + onSuccess.invoke(it.result) } onError { - + onError.invoke(it.message.toString()) } } } + + fun cancelRequest(tag: String) { + cancel(tag) + } + } \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCameraLive.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCameraLive.kt new file mode 100644 index 0000000000..36274400ce --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCameraLive.kt @@ -0,0 +1,8 @@ +package com.mogo.eagle.core.data.road + +//路侧直播视频流返回数据 +data class RoadCameraLive( + val ip:String, // ip + val liveUrl:String, // 直播地址 + val imageUrl:String // 首帧封面地址 +) \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCrossCamera.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCrossCamera.kt new file mode 100644 index 0000000000..5e7c9ca480 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/road/RoadCrossCamera.kt @@ -0,0 +1,16 @@ +package com.mogo.eagle.core.data.road + +//接口请求路侧,返回设备信息 +data class RoadCrossCamera( + val crossingId: String, // 路侧对应ID(衡阳1-25号路口) + val roadUniqueId: String? = null, // 高精地图crossID + val lon: Double, // 路口多设备经纬度中心点lon + val lat: Double, // 路口多设备经纬度中心点lat + val deviceInfoList: List +) + +data class CameraDeviceInfo( + val deviceIp: String, // 设备ip + val lon: Double, // 设备lon(非灯杆) + val lat: Double // 设备lat(非灯杆) +) diff --git a/core/mogo-core-network/src/main/java/com/mogo/eagle/core/network/CoroutineDSL.kt b/core/mogo-core-network/src/main/java/com/mogo/eagle/core/network/CoroutineDSL.kt index d2b2bd8238..51a234aff5 100644 --- a/core/mogo-core-network/src/main/java/com/mogo/eagle/core/network/CoroutineDSL.kt +++ b/core/mogo-core-network/src/main/java/com/mogo/eagle/core/network/CoroutineDSL.kt @@ -51,10 +51,7 @@ class Request { } fun request(requestKey: String? = null) { - - //todo list 缓存result , 在停止时关闭 GlobalScope.launch(context = Dispatchers.Main) { - start?.invoke() try { val deferred = GlobalScope.async(Dispatchers.IO, start = CoroutineStart.LAZY) {