[6.6.2]增加全息路口提示判断 - 是否存在路侧数据
This commit is contained in:
@@ -7,13 +7,15 @@ import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.commons.voice.AIAssist
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.data.road.CameraDeviceInfo
|
||||
import com.mogo.eagle.core.data.road.RoadCrossCamera
|
||||
import com.mogo.eagle.core.function.api.map.listener.IGaoDeMapLocationListener
|
||||
import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener
|
||||
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.CallerGaoDeMapLocationListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.function.map.R
|
||||
@@ -29,11 +31,14 @@ import com.zhidaoauto.map.data.road.StopLine
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
@SuppressLint("NewApi")
|
||||
class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener {
|
||||
companion object {
|
||||
|
||||
private const val TAG = "RoadCrossCameraManager"
|
||||
private const val REQUEST_CAMERA_MSG = 0
|
||||
private const val REMOVE_MARKER_MSG = 1
|
||||
private const val REQUEST_CAMERA_DELAY_TIME = 50000L
|
||||
private const val REMOVE_MARKER_DELAY_TIME = 10000L
|
||||
|
||||
val instance: RoadCrossCameraManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
|
||||
@@ -47,25 +52,71 @@ class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
private var isCameraRequest = false
|
||||
|
||||
@Volatile
|
||||
private var roadCrossCameraList: List<CameraDeviceInfo>? = null
|
||||
private var roadCrossCameraList: List<RoadCrossCamera>? = null
|
||||
|
||||
private val overlayManager = CallerMapUIServiceManager.getOverlayManager()
|
||||
|
||||
private val handler = object :Handler(Looper.getMainLooper()){
|
||||
private val handler = object : Handler(Looper.getMainLooper()) {
|
||||
override fun handleMessage(msg: Message) {
|
||||
super.handleMessage(msg)
|
||||
CallerLogger.d("$M_MAP$TAG", "remove marker")
|
||||
overlayManager?.removeAllPointsInOwner(TAG)
|
||||
when (msg.what) {
|
||||
REQUEST_CAMERA_MSG -> {
|
||||
getAllRoadCross()
|
||||
}
|
||||
|
||||
REMOVE_MARKER_MSG -> {
|
||||
CallerLogger.d("$M_MAP$TAG", "remove marker")
|
||||
overlayManager?.removeAllPointsInOwner(TAG)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun init(context: Context?) {
|
||||
mContext = context
|
||||
CallerMapRoadListenerManager.addListener(TAG, this)
|
||||
CallerGaoDeMapLocationListenerManager.addListener(TAG, this)
|
||||
getAllRoadCross()
|
||||
}
|
||||
|
||||
private fun getAllRoadCross() {
|
||||
val cityCode = CallerMapUIServiceManager.getCityCode()
|
||||
if (cityCode.isNullOrEmpty() || (cityCode.isNotEmpty() && cityCode == "010")) {
|
||||
handler.removeMessages(REQUEST_CAMERA_MSG)
|
||||
handler.sendEmptyMessageDelayed(REQUEST_CAMERA_MSG, REQUEST_CAMERA_DELAY_TIME + 100000)
|
||||
return
|
||||
}
|
||||
ndeRoadCameraNetWorkModel.getRoadCrossInfo(
|
||||
onSuccess = { it ->
|
||||
if (it.isNotEmpty()) {
|
||||
roadCrossCameraList = it
|
||||
val map = mutableMapOf<String, RoadCrossCamera>()
|
||||
it.forEach { road ->
|
||||
road.crossingId?.let { id ->
|
||||
map[id] = road
|
||||
}
|
||||
}
|
||||
roadCrossTrace(TAG, map)
|
||||
} else {
|
||||
traceError("roadCrossInfo request size is zero")
|
||||
}
|
||||
},
|
||||
onError = {
|
||||
handler.removeMessages(REQUEST_CAMERA_MSG)
|
||||
handler.sendEmptyMessageDelayed(REQUEST_CAMERA_MSG, REQUEST_CAMERA_DELAY_TIME)
|
||||
traceError("roadCrossInfo request errorMsg: $it")
|
||||
})
|
||||
}
|
||||
|
||||
override fun onCityCodeChanged(cityCode: String) {
|
||||
super.onCityCodeChanged(cityCode)
|
||||
if (cityCode != "010") {
|
||||
getAllRoadCross()
|
||||
}
|
||||
}
|
||||
|
||||
private var distance: Double by Delegates.observable(0.0) { _, _, newV ->
|
||||
if(!AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){
|
||||
if (!AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) {
|
||||
return@observable
|
||||
}
|
||||
if (!isCameraRequest && newV < 100) {
|
||||
@@ -75,34 +126,29 @@ class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
"$M_MAP$TAG",
|
||||
"触发接口调用 dis: $distance , roadCrossEnd: ${roadCrossEnd ?: "null"} "
|
||||
)
|
||||
if(roadCrossEnd == null){
|
||||
if (roadCrossEnd == null) {
|
||||
roadCrossTrace(
|
||||
TAG, mapOf("errorMsg" to "触发接口调用,roadCrossEnd获取为null",)
|
||||
TAG, mapOf("errorMsg" to "触发接口调用,roadCrossEnd获取为null")
|
||||
)
|
||||
}
|
||||
|
||||
if (roadCrossEnd != null) {
|
||||
ndeRoadCameraNetWorkModel.getRoadCrossInfo(roadCrossEnd,
|
||||
onSuccess = {
|
||||
if (it.crossingId == null) {
|
||||
traceError("roadUniqueId is null")
|
||||
return@getRoadCrossInfo
|
||||
}
|
||||
if (it.deviceInfoList.isEmpty()) {
|
||||
traceError("deviceInfoList isEmpty")
|
||||
return@getRoadCrossInfo
|
||||
}
|
||||
roadCrossCameraList = it.deviceInfoList
|
||||
// 地图上打marker(注意marker方向),marker点击获取对应ip
|
||||
ThreadUtils.runOnUiThread {
|
||||
if (roadCrossCameraList != null) {
|
||||
roadCrossCameraList?.forEach {
|
||||
//todo 多个匹配,需要修改
|
||||
if (!it.roadUniqueId.isNullOrEmpty()
|
||||
&& it.roadUniqueId!!.contains(roadCrossEnd)
|
||||
) {
|
||||
it.deviceInfoList.forEach { deviceInfo ->
|
||||
addCameraDeviceMarker(deviceInfo)
|
||||
}
|
||||
} else {
|
||||
requestSingleCross(roadCrossEnd)
|
||||
}
|
||||
},
|
||||
onError = {
|
||||
traceError("roadCrossInfo request errorMsg: $it")
|
||||
})
|
||||
}
|
||||
} else {
|
||||
requestSingleCross(roadCrossEnd)
|
||||
}
|
||||
} else {
|
||||
traceError("roadCross is null")
|
||||
}
|
||||
@@ -111,6 +157,30 @@ class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
}
|
||||
}
|
||||
|
||||
private fun requestSingleCross(roadCrossEnd: String) {
|
||||
ndeRoadCameraNetWorkModel.getRoadCrossInfo(roadCrossEnd,
|
||||
onSuccess = { result ->
|
||||
val it = result[0]
|
||||
if (it.crossingId == null) {
|
||||
traceError("roadUniqueId is null")
|
||||
return@getRoadCrossInfo
|
||||
}
|
||||
if (it.deviceInfoList.isEmpty()) {
|
||||
traceError("deviceInfoList isEmpty")
|
||||
return@getRoadCrossInfo
|
||||
}
|
||||
// 地图上打marker(注意marker方向),marker点击获取对应ip
|
||||
ThreadUtils.runOnUiThread {
|
||||
it.deviceInfoList.forEach { deviceInfo ->
|
||||
addCameraDeviceMarker(deviceInfo)
|
||||
}
|
||||
}
|
||||
},
|
||||
onError = {
|
||||
traceError("roadCrossInfo request errorMsg: $it")
|
||||
})
|
||||
}
|
||||
|
||||
private fun addCameraDeviceMarker(cameraDeviceInfo: CameraDeviceInfo) {
|
||||
mContext?.let {
|
||||
val builder =
|
||||
@@ -141,6 +211,44 @@ class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
}
|
||||
}
|
||||
|
||||
fun hasCrossCamera(): Boolean {
|
||||
if(CallerMapUIServiceManager.getCityCode() == "010"){
|
||||
roadCrossTrace(
|
||||
TAG, mapOf("errorMsg" to "cityCode限制 - 北京无路口设备")
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
val roadCrossEnd = CallerMapRoadListenerManager.getCrossEndInfo()
|
||||
if(roadCrossEnd == null){
|
||||
roadCrossTrace(
|
||||
TAG, mapOf("errorMsg" to "hasCrossCamera - 未获取到地图crossEnd数据")
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
if (roadCrossCameraList == null) {
|
||||
roadCrossTrace(
|
||||
TAG, mapOf("errorMsg" to "hasCrossCamera - 未获取到全市路口设备信息")
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
roadCrossCameraList?.forEach {
|
||||
val result = (!it.roadUniqueId.isNullOrEmpty()
|
||||
&& it.roadUniqueId!!.contains(roadCrossEnd))
|
||||
roadCrossTrace(
|
||||
TAG, mapOf("errorMsg" to "hasCrossCamera - 遍历匹配路口数据:$result - $roadCrossEnd")
|
||||
)
|
||||
return result
|
||||
}
|
||||
|
||||
roadCrossTrace(
|
||||
TAG, mapOf("errorMsg" to "hasCrossCamera - 均不匹配上述条件")
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun batchRequestCrossLive(cameraDeviceInfo: List<CameraDeviceInfo>) {
|
||||
val list = mutableListOf<String>()
|
||||
@@ -163,7 +271,7 @@ class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
override fun onRoadChange(cross: Boolean, roadCross: RoadCross?) {
|
||||
super.onRoadChange(cross, roadCross)
|
||||
// 出路口
|
||||
if(!isCameraRequest){
|
||||
if (!isCameraRequest) {
|
||||
CallerLogger.d("$M_MAP$TAG", "未触发路口获取marker")
|
||||
return
|
||||
}
|
||||
@@ -172,7 +280,7 @@ class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
ndeRoadCameraNetWorkModel.cancelRequest("roadCross")
|
||||
// 清除marker
|
||||
CallerLogger.d("$M_MAP$TAG", "remove marker handler")
|
||||
handler.sendEmptyMessageDelayed(REQUEST_CAMERA_MSG, REMOVE_MARKER_DELAY_TIME)
|
||||
handler.sendEmptyMessageDelayed(REMOVE_MARKER_MSG, REMOVE_MARKER_DELAY_TIME)
|
||||
// 释放控制
|
||||
isCameraRequest = false
|
||||
CallerLogger.d("$M_MAP$TAG", "经过路口,释放控制")
|
||||
@@ -197,7 +305,7 @@ class RoadCrossCameraManager : IMoGoMapRoadListener {
|
||||
linkChainLog = ChainConstant.CHAIN_TYPE_STATUS,
|
||||
linkCode = ChainConstant.CHAIN_SOURCE_MAP,
|
||||
nodeAliasCode = ChainConstant.CHAIN_CODE_MAP_ROAD_CROSS_ERROR,
|
||||
paramIndexes = [0]
|
||||
paramIndexes = [0, 1]
|
||||
)
|
||||
private fun roadCrossTrace(tag: String, paramMap: Any) {
|
||||
CallerLogger.d("$M_MAP$tag", "$paramMap")
|
||||
|
||||
@@ -27,8 +27,8 @@ class NDERoadCameraNetWorkModel private constructor() {
|
||||
}
|
||||
|
||||
fun getRoadCrossInfo(
|
||||
crossID: String,
|
||||
onSuccess: ((RoadCrossCamera) -> Unit),
|
||||
crossID: String? = null,
|
||||
onSuccess: ((List<RoadCrossCamera>) -> Unit),
|
||||
onError: ((String) -> Unit)
|
||||
) {
|
||||
request<BaseResponse<List<RoadCrossCamera>>>("roadCross") {
|
||||
@@ -39,7 +39,7 @@ class NDERoadCameraNetWorkModel private constructor() {
|
||||
getNetWorkApi().roadCameraRequest(
|
||||
pair.first,
|
||||
pair.second,
|
||||
crossID,
|
||||
crossID?:"",
|
||||
loc.longitude,
|
||||
loc.latitude,
|
||||
CallerMapUIServiceManager.getCityCode() ?: ""
|
||||
@@ -48,7 +48,7 @@ class NDERoadCameraNetWorkModel private constructor() {
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result.isNotEmpty()) {
|
||||
onSuccess.invoke(it.result[0])
|
||||
onSuccess.invoke(it.result)
|
||||
} else {
|
||||
onError.invoke("getRoadCrossInfo empty camera info")
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.V2X_EVENT_TAG
|
||||
import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener
|
||||
import com.mogo.eagle.core.function.business.roadcross.RoadCrossCameraManager
|
||||
import com.mogo.eagle.core.function.business.roadcross.RoadCrossCameraManager.Companion.instance
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapIdentifyManager
|
||||
@@ -208,6 +210,11 @@ class RoadCrossRoamView @JvmOverloads constructor(
|
||||
CallerLogger.d("$M_MAP$TAG", "attachView return , mainPageVisible is false")
|
||||
return
|
||||
}
|
||||
// 没有路侧设备,不做处理
|
||||
if(!instance.hasCrossCamera()){
|
||||
CallerLogger.d("$M_MAP$TAG", "没有路侧设备,不做处理")
|
||||
return
|
||||
}
|
||||
//播放语音
|
||||
val dis = CallerMapRoadListenerManager.getStopLineDistance()?.toInt() ?: 0
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
|
||||
Reference in New Issue
Block a user