优化拥堵策略

This commit is contained in:
tongchenfei
2020-08-25 20:45:33 +08:00
parent bb97b71eb2
commit af819a4241

View File

@@ -5,7 +5,6 @@ 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
@@ -15,17 +14,35 @@ import com.mogo.utils.logger.Logger
* 速度记录间隔,单位是毫秒
*/
private const val SPEED_RECORD_TIME_INTERVAL = 2 * 60 * 1000L
/**
* 停车标志位阈值,单位是次,两秒一次
*/
private const val STOP_FLAG_THRESHOLD = 30
private const val TAG = "BlockUploadStrategy"
/**
* 用于计算拥堵策略
*/
class BlockStrategy(private val apis:IMogoServiceApis) {
class BlockStrategy(private val apis: IMogoServiceApis) {
private var startRecordTime: Long = 0
private var speedCacheList = ArrayList<Float>()
/**
* 停车标志位当速度为0时加1超过[STOP_FLAG_THRESHOLD]判定为停车,不认为是拥堵,这组数据无效
*/
private var stopFlag = 0
/**
* 拥堵速度计算上报策略
* 计算[SPEED_RECORD_TIME_INTERVAL]内的平均速度,并上报
*
* 定义的此方法是每两秒钟调用一次, 两分钟为一段进行计算 |--两分钟--|--两分钟--|--两分钟--|
*
* 里面有一个小策略使用了一个停车标志位如果速度为0停车标志位加一一个两分钟时间段内
* 停车标志为累加超过[STOP_FLAG_THRESHOLD]判定为停车,不是拥堵,舍弃掉整个两分钟数据,不进行上报,
* 否则上报服务端,返回是否抓取视频
*
* @param speed 当前速度单位需要是Km/h
*/
fun recordSpeed(speed: Float) {
@@ -33,21 +50,32 @@ class BlockStrategy(private val apis:IMogoServiceApis) {
if (startRecordTime == 0L) {
// 数据初始化
startRecordTime = current
stopFlag = 0
speedCacheList.clear()
}
speedCacheList.add(speed)
if (speed == 0F) {
stopFlag++
}else{
stopFlag = 0
}
if (current - startRecordTime >= SPEED_RECORD_TIME_INTERVAL) {
// 到达时间限制,上报速度,数据清空
var sum = 0F
speedCacheList.forEach {
sum += it
if(stopFlag < STOP_FLAG_THRESHOLD) {
// 停车标志位小于阈值,判定不是停车,计算平均值,进行上报
var sum = 0F
speedCacheList.forEach {
sum += it
}
val ave = sum / speedCacheList.size
Logger.d(TAG, "平均速度为: $ave")
// 上报平均速度
uploadAverageSpeed(ave)
}
val ave = sum / speedCacheList.size
Logger.d(TAG, "平均速度为: $ave")
// 上报平均速度
uploadAverageSpeed(ave)
startRecordTime = 0
}
}