From 49a0ce8627bcfbd96fe15a6961d3ae1d94b6765e Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Wed, 26 Aug 2020 19:11:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8B=A5=E5=A0=B5=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E4=B8=8A=E6=8A=A5=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/share/StrategyShareProvider.kt | 7 ++-- .../module/share/bean/AverateSpeedResponse.kt | 6 +++ .../share/constant/StrategyShareConst.kt | 4 ++ .../mogo/module/share/net/ShareApiService.kt | 5 ++- .../AccidentStrategyPushWrapper.kt | 19 ++++++++- .../AccidentStrategyReceiver.kt | 16 ++++++-- .../share/strategyreceiver/BlockStrategy.kt | 40 ++++++++++++++----- 7 files changed, 76 insertions(+), 21 deletions(-) create mode 100644 modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/AverateSpeedResponse.kt diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/StrategyShareProvider.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/StrategyShareProvider.kt index 0d2d07744c..b0e1973ec9 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/StrategyShareProvider.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/StrategyShareProvider.kt @@ -20,15 +20,16 @@ import com.mogo.utils.logger.Logger @Route(path = MogoServicePaths.PATH_STRATEGY_SHARE) class StrategyShareProvider : IProvider { private lateinit var blockStrategy: BlockStrategy - override fun init(context: Context?) { + override fun init(context: Context) { Logger.d(S_TAG, "策略上报Provider初始化====") val apis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context) as IMogoServiceApis - blockStrategy = BlockStrategy(apis) + blockStrategy = BlockStrategy(context, apis) // 注册事故 apis.getSocketManagerApi(context).registerOnMessageListener(ACCIDENT_STRATEGY_SHARE_PUSH_TYPE, AccidentStrategyReceiver(apis)) apis.registerCenterApi.registerMogoLocationListener(MogoServicePaths.PATH_STRATEGY_SHARE){ // Logger.d(S_TAG,"定位发生变化,准备记录速度: ${it.speed}") - blockStrategy.recordSpeed(it.speed) + + blockStrategy.recordSpeed(it.speed * 3.6F) } } } \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/AverateSpeedResponse.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/AverateSpeedResponse.kt new file mode 100644 index 0000000000..5f843cd862 --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/bean/AverateSpeedResponse.kt @@ -0,0 +1,6 @@ +package com.mogo.module.share.bean + +import com.mogo.commons.data.BaseData + +data class AverateSpeedResponse(var result:Result):BaseData() +data class Result(var upload:Boolean) diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/StrategyShareConst.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/StrategyShareConst.kt index 014701a56d..5866b734f9 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/StrategyShareConst.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/StrategyShareConst.kt @@ -1,4 +1,8 @@ package com.mogo.module.share.constant const val S_TAG = "StrategyShare" + +/** + * 目前两个策略上报(事故,拥堵)都是走的这个push + */ const val ACCIDENT_STRATEGY_SHARE_PUSH_TYPE = 401013 \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt index 454111f885..c67c0c53c6 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt @@ -1,6 +1,7 @@ package com.mogo.module.share.net import com.mogo.commons.data.BaseData +import com.mogo.module.share.bean.AverateSpeedResponse import io.reactivex.Observable import retrofit2.http.* @@ -18,6 +19,6 @@ interface ShareApiService { /** * 拥堵策略,上报平均速度 */ - @POST("") - fun sendAverageSpeedForBlockStrategy(@FieldMap param:Map):Observable + @POST("/deva/car/path/no/poiStrategyCheck/v1") + fun sendAverageSpeedForBlockStrategy(@FieldMap param:Map):Observable } \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyPushWrapper.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyPushWrapper.kt index 330c56f8cf..ec20e86046 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyPushWrapper.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyPushWrapper.kt @@ -1,11 +1,26 @@ package com.mogo.module.share.strategyreceiver + + data class AccidentStrategyPushWrapper( /** - * 策略类型,1代表事故 + * 策略类型,[TYPE_ACCIDENT],[TYPE_BLOCK] */ val type: Int, /** * 触发点的事件id */ - val id: Long, val lat: Double, val lon: Double) + val id: Long, val lat: Double, val lon: Double){ + + companion object{ + /** + * 服务端下发push,通知收集事故视频 + */ + const val TYPE_ACCIDENT = 1 + + /** + * 服务端下发push,通知收集拥堵 + */ + const val TYPE_BLOCK = 2 + } +} diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyReceiver.kt index 7ed36e0f56..242faf2381 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyReceiver.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/AccidentStrategyReceiver.kt @@ -2,6 +2,8 @@ package com.mogo.module.share.strategyreceiver import com.mogo.map.MogoLatLng import com.mogo.module.share.constant.S_TAG +import com.mogo.module.share.strategyreceiver.AccidentStrategyPushWrapper.Companion.TYPE_ACCIDENT +import com.mogo.module.share.strategyreceiver.AccidentStrategyPushWrapper.Companion.TYPE_BLOCK import com.mogo.service.IMogoServiceApis import com.mogo.service.connection.IMogoOnMessageListener import com.mogo.service.tanlu.IMogoTanluProvider @@ -12,14 +14,22 @@ import com.mogo.utils.logger.Logger * 车辆经过事故事件,上报视频 * @author tong */ -class AccidentStrategyReceiver(private val apis: IMogoServiceApis):IMogoOnMessageListener { +class AccidentStrategyReceiver(private val apis: IMogoServiceApis) : IMogoOnMessageListener { override fun target(): Class = AccidentStrategyPushWrapper::class.java override fun onMsgReceived(obj: AccidentStrategyPushWrapper?) { obj?.let { Logger.d(S_TAG, "Accident strategy share onMessageReceived: $obj") - // 调用探路接口上报,现在只接入了事故事件上报这一种策略上报,所以poiType固定为TypeAccident - apis.tanluApi.uploadRoadCondition(TanluUploadParams(IMogoTanluProvider.TYPE_ACCIDENT, IMogoTanluProvider.UPLOAD_FROM_STRATEGY_ACCIDENT_AUTO, it.id, MogoLatLng(it.lat, it.lon))) + when (obj.type) { + TYPE_ACCIDENT -> { + // 收集事故视频 + apis.tanluApi.uploadRoadCondition(TanluUploadParams(IMogoTanluProvider.TYPE_ACCIDENT, IMogoTanluProvider.UPLOAD_FROM_STRATEGY_ACCIDENT_AUTO, it.id, MogoLatLng(it.lat, it.lon))) + } + TYPE_BLOCK -> { + // 收集拥堵视频 + apis.tanluApi.uploadRoadCondition(TanluUploadParams(IMogoTanluProvider.TYPE_BLOCK, IMogoTanluProvider.UPLOAD_FROM_STRATEGY_CLOUD_CHECK, it.id, MogoLatLng(it.lat, it.lon))) + } + } } } } \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/BlockStrategy.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/BlockStrategy.kt index 9ca3f12001..ccf5bd7020 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/BlockStrategy.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/BlockStrategy.kt @@ -1,13 +1,19 @@ package com.mogo.module.share.strategyreceiver +import android.content.Context import android.os.SystemClock import android.util.ArrayMap +import com.mogo.commons.network.SubscribeImpl +import com.mogo.map.MogoLatLng +import com.mogo.module.share.bean.AverateSpeedResponse import com.mogo.module.share.constant.HttpConstant +import com.mogo.module.share.manager.ServiceApisManager import com.mogo.module.share.net.ShareApiService import com.mogo.service.IMogoServiceApis import com.mogo.service.tanlu.IMogoTanluProvider import com.mogo.service.tanlu.TanluUploadParams import com.mogo.utils.logger.Logger +import com.mogo.utils.network.RequestOptions /** @@ -24,7 +30,7 @@ private const val TAG = "BlockUploadStrategy" /** * 用于计算拥堵策略 */ -class BlockStrategy(private val apis: IMogoServiceApis) { +class BlockStrategy(private val context: Context, private val apis: IMogoServiceApis) { private var startRecordTime: Long = 0 private var speedCacheList = ArrayList() @@ -58,13 +64,13 @@ class BlockStrategy(private val apis: IMogoServiceApis) { if (speed == 0F) { stopFlag++ - }else{ + } else { stopFlag = 0 } if (current - startRecordTime >= SPEED_RECORD_TIME_INTERVAL) { // 到达时间限制,上报速度,数据清空 - if(stopFlag < STOP_FLAG_THRESHOLD) { + if (stopFlag < STOP_FLAG_THRESHOLD) { // 停车标志位小于阈值,判定不是停车,计算平均值,进行上报 var sum = 0F speedCacheList.forEach { @@ -74,8 +80,8 @@ class BlockStrategy(private val apis: IMogoServiceApis) { Logger.d(TAG, "平均速度为: $ave") // 上报平均速度 uploadAverageSpeed(ave) - }else{ - Logger.d(TAG,"判定为停车,不进行上报") + } else { + Logger.d(TAG, "判定为停车,不进行上报") } startRecordTime = 0 } @@ -83,11 +89,23 @@ class BlockStrategy(private val apis: IMogoServiceApis) { private fun uploadAverageSpeed(average: Float) { val params = ArrayMap() - params["aveSpeed"] = average.toString() - val disposable = apis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendAverageSpeedForBlockStrategy(params).subscribe { - // todo 收到服务端回调,视情况进行视频上报 - val p = TanluUploadParams(IMogoTanluProvider.TYPE_BLOCK, IMogoTanluProvider.UPLOAD_FROM_STRATEGY_BLOCK_AUTO) - apis.tanluApi.uploadRoadCondition(p) - } + params["speed"] = average.toString() + val disposable = apis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendAverageSpeedForBlockStrategy(params).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { + override fun onSuccess(response: AverateSpeedResponse?) { + super.onSuccess(response) + response?.let { + Logger.d(TAG, "收到服务端返回结果: $it") + // 收到服务端回调,视情况进行视频上报 + if (it.result.upload) { + val p = TanluUploadParams(IMogoTanluProvider.TYPE_BLOCK, IMogoTanluProvider.UPLOAD_FROM_STRATEGY_BLOCK_AUTO) + val location = ServiceApisManager.serviceApis.mapServiceApi.getSingletonLocationClient(context).lastKnowLocation + val latLon = MogoLatLng(location.latitude, location.longitude) + p.location = latLon + apis.tanluApi.uploadRoadCondition(p) + } + } + } + + }) } } \ No newline at end of file