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 eb49f7af20..bb7a0e59c2 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 @@ -7,6 +7,7 @@ import com.alibaba.android.arouter.launcher.ARouter import com.mogo.module.share.constant.ACCIDENT_STRATEGY_SHARE_PUSH_TYPE import com.mogo.module.share.constant.S_TAG import com.mogo.module.share.strategyreceiver.AccidentStrategyReceiver +import com.mogo.module.share.strategyreceiver.BlockStrategy import com.mogo.service.IMogoServiceApis import com.mogo.service.MogoServicePaths import com.mogo.utils.logger.Logger @@ -18,10 +19,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?) { Logger.d(S_TAG, "策略上报Provider初始化====") val apis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context) as IMogoServiceApis + blockStrategy = BlockStrategy(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) + } } } \ 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 1db5feccf8..454111f885 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 @@ -14,4 +14,10 @@ interface ShareApiService { @FormUrlEncoded @POST("/yycp-realtimeLocations/vehicleTypeManage/car/updateVehicleType/v1") fun sendHelpSignal(@FieldMap param: Map): Observable + + /** + * 拥堵策略,上报平均速度 + */ + @POST("") + 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/BlockStrategy.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/BlockStrategy.kt new file mode 100644 index 0000000000..125ebab3b6 --- /dev/null +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/strategyreceiver/BlockStrategy.kt @@ -0,0 +1,63 @@ +package com.mogo.module.share.strategyreceiver + +import android.os.SystemClock +import android.util.ArrayMap +import com.mogo.module.share.constant.HttpConstant +import com.mogo.module.share.net.ShareApiService +import com.mogo.service.IMogoServiceApis +import com.mogo.service.network.IMogoNetwork +import com.mogo.service.tanlu.IMogoTanluProvider +import com.mogo.service.tanlu.TanluUploadParams +import com.mogo.utils.logger.Logger + + +/** + * 速度记录间隔,单位是毫秒 + */ +private const val SPEED_RECORD_TIME_INTERVAL = 2 * 60 * 1000L +private const val TAG = "BlockUploadStrategy" +/** + * 用于计算拥堵策略 + */ +class BlockStrategy(private val apis:IMogoServiceApis) { + private var startRecordTime: Long = 0 + private var speedCacheList = ArrayList() + + /** + * 拥堵速度计算上报策略 + * 计算[SPEED_RECORD_TIME_INTERVAL]内的平均速度,并上报 + * @param speed 当前速度,单位需要是Km/h + */ + fun recordSpeed(speed: Float) { + val current = SystemClock.uptimeMillis() + if (startRecordTime == 0L) { + // 数据初始化 + startRecordTime = current + speedCacheList.clear() + } + + speedCacheList.add(speed) + + if (current - startRecordTime >= SPEED_RECORD_TIME_INTERVAL) { + // 到达时间限制,上报速度,数据清空 + var sum = 0F + speedCacheList.forEach { + sum += it + } + val ave = sum / speedCacheList.size + Logger.d(TAG, "平均速度为: $ave") + // 上报平均速度 + uploadAverageSpeed(ave) + } + } + + 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) + } + } +} \ No newline at end of file