添加策略上报:拥堵自动上报接口请求逻辑
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,4 +14,10 @@ interface ShareApiService {
|
||||
@FormUrlEncoded
|
||||
@POST("/yycp-realtimeLocations/vehicleTypeManage/car/updateVehicleType/v1")
|
||||
fun sendHelpSignal(@FieldMap param: Map<String, String>): Observable<BaseData>
|
||||
|
||||
/**
|
||||
* 拥堵策略,上报平均速度
|
||||
*/
|
||||
@POST("")
|
||||
fun sendAverageSpeedForBlockStrategy(@FieldMap param:Map<String,String>):Observable<BaseData>
|
||||
}
|
||||
@@ -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<Float>()
|
||||
|
||||
/**
|
||||
* 拥堵速度计算上报策略
|
||||
* 计算[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<String, String>()
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user