轮询修改到统一轮询

This commit is contained in:
yangyakun
2023-07-05 14:31:03 +08:00
parent a7c495c111
commit 50c0d1f36f
2 changed files with 38 additions and 152 deletions

View File

@@ -26,11 +26,11 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
@@ -44,11 +44,11 @@ import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceM
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addTrajectoryListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.removeListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
import com.mogo.och.common.module.manager.loopmanager.LoopInfo
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.calculateRouteSumLength
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterLatlngToLocation
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations
import com.mogo.och.common.module.utils.PinYinUtil
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean
@@ -75,13 +75,10 @@ import io.reactivex.disposables.Disposable
import io.reactivex.exceptions.UndeliverableException
import io.reactivex.functions.Consumer
import io.reactivex.plugins.RxJavaPlugins
import mogo.telematics.pad.MessagePad
import mogo.telematics.pad.MessagePad.ArrivalNotification
import mogo.telematics.pad.MessagePad.GlobalPathResp
import system_master.SystemStatusInfo
import java.io.IOException
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.TimeUnit
/**
* Created by pangfan on 2021/8/19
@@ -95,6 +92,10 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
private val TAG = TaxiPassengerModel::class.java.simpleName
private val STARTREADYTOAUTOPILOT = "startReadyToAutopilot"
private val MINANDWAITSERVICE = "mInAndWaitService"
private val MQUERYORDERREMAINING = "mQueryOrderRemaining"
// 获取当前订单
@Volatile
var currentOCHOrder: TaxiPassengerOrderQueryRespBean.Result? = null//当前订单
@@ -132,32 +133,32 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
// The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the excTeption has nowhere to go to begin with
RxJavaPlugins.setErrorHandler(Consumer { e ->
if (e is UndeliverableException) {
d(SceneConstant.M_TAXI_P + TAG, "UndeliverableException")
d(M_TAXI_P + TAG, "UndeliverableException")
return@Consumer
}
if (e is IOException) { //
// fine, irrelevant network problem or API that throws on cancellation
d(SceneConstant.M_TAXI_P + TAG, "IOException")
d(M_TAXI_P + TAG, "IOException")
return@Consumer
}
if (e is InterruptedException) {
// fine, some blocking code was interrupted by a dispose call
d(SceneConstant.M_TAXI_P + TAG, "InterruptedException")
d(M_TAXI_P + TAG, "InterruptedException")
return@Consumer
}
if (e is NullPointerException || e is IllegalArgumentException) {
// that's likely a bug in the application
d(SceneConstant.M_TAXI_P + TAG, "NullPointerException or IllegalArgumentException")
d(M_TAXI_P + TAG, "NullPointerException or IllegalArgumentException")
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
if (e is IllegalStateException) {
// that's a bug in RxJava or in a custom operator
d(SceneConstant.M_TAXI_P + TAG, "IllegalStateException")
d(M_TAXI_P + TAG, "IllegalStateException")
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
d(SceneConstant.M_TAXI_P + TAG, "Undeliverable exception")
d(M_TAXI_P + TAG, "Undeliverable exception")
})
startOrStopOrderLoop()
}
@@ -216,11 +217,11 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
* false 关闭订单轮训
*/
private fun startOrStopOrderLoop(start: Boolean) {
d(SceneConstant.M_TAXI_P + TAG, "startOrStopOrderLoop() $start")
d(M_TAXI_P + TAG, "startOrStopOrderLoop() $start")
if (start) {
TaxiPassengerModelLoopManager.getInstance().startInAndWaitOrdersLoop()
BizLoopManager.setLoopFunction(MINANDWAITSERVICE,LoopInfo(2, TaxiPassengerModel::queryInAndWaitOrders))
} else {
TaxiPassengerModelLoopManager.getInstance().stopInAndWaitOrdersLoop()
BizLoopManager.removeLoopFunction(MINANDWAITSERVICE)
}
}
@@ -278,7 +279,7 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
override fun onError() {}
override fun onFail(code: Int, msg: String) {
e(SceneConstant.M_TAXI_P + TAG, "queryInAndWaitOrders$code$msg")
e(M_TAXI_P + TAG, "queryInAndWaitOrders$code$msg")
}
})
}
@@ -383,7 +384,7 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
}
}
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent ->
d(SceneConstant.M_TAXI_P + TAG, "onIntentReceived = %s", intentStr)
d(M_TAXI_P + TAG, "onIntentReceived = %s", intentStr)
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
if (NetworkUtils.isConnected(mContext)) {
startOrStopOrderLoop(true)
@@ -544,9 +545,9 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
fun startOrStopQueryOrderRemaining(isStart: Boolean) {
if (isStart) {
TaxiPassengerModelLoopManager.getInstance().startQueryOrderRemainingLoop()
BizLoopManager.setLoopFunction(MQUERYORDERREMAINING,LoopInfo(2, TaxiPassengerModel::queryOrderRemaining))
} else {
TaxiPassengerModelLoopManager.getInstance().stopQueryOrderRemainingLoop()
BizLoopManager.removeLoopFunction(MQUERYORDERREMAINING)
}
}
@@ -561,10 +562,7 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
object : OchCommonServiceCallback<TaxiPassengerOrderQueryRemainingResp> {
override fun onSuccess(data: TaxiPassengerOrderQueryRemainingResp) {
if (data.data != null) {
e(
SceneConstant.M_TAXI_P + TAG,
"distance = " + data.data.distance + " ,duration = " + data.data.duration
)
e(M_TAXI_P + TAG, "distance = " + data.data.distance + " ,duration = " + data.data.duration)
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderDistToEndChanged(
data.data.distance,
@@ -580,13 +578,13 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
fun queryOrderRouteList() {
if (currentOCHOrder == null) return
d(SceneConstant.M_TAXI_P + TAG, "--route--- queryOrderRouteList")
d(M_TAXI_P + TAG, "--route--- queryOrderRouteList")
TaxiPassengerServiceManager.queryOrderRouteList(
mContext!!,
currentOCHOrder!!.orderNo,
object : OchCommonServiceCallback<TaxiPassengerQueryOrderRouteResp> {
override fun onSuccess(data: TaxiPassengerQueryOrderRouteResp) {
d(SceneConstant.M_TAXI_P + TAG, "--route---" + GsonUtil.jsonFromObject(data))
d(M_TAXI_P + TAG, "--route---" + GsonUtil.jsonFromObject(data))
if (data.data != null && data.data != null && data.data.size > 0) {
if (mAutopilotPlanningCallback != null) {
calculateRouteLineSum(data.data)
@@ -656,7 +654,7 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
override fun onFail(code: Int, msg: String) {
ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!")
e(
SceneConstant.M_TAXI_P + TAG,
M_TAXI_P + TAG,
"提交用户输入的手机后4位、并进行状态扭转 后台结果错误$code$msg"
)
}
@@ -677,12 +675,12 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
override fun onError() {
ToastUtils.showLong("网络错误请稍后再试")
e(SceneConstant.M_TAXI_P + TAG, "对订单进行打分 1-5分 网络错误")
e(M_TAXI_P + TAG, "对订单进行打分 1-5分 网络错误")
commonCallback?.onCommonCallback(false)
}
override fun onFail(code: Int, msg: String) {
e(SceneConstant.M_TAXI_P + TAG, "对订单进行打分 1-5分 后台结果错误$code$msg")
e(M_TAXI_P + TAG, "对订单进行打分 1-5分 后台结果错误$code$msg")
commonCallback?.onCommonCallback(false)
}
})
@@ -722,9 +720,11 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
fun startOrStopReadyToAutopilotLoop(isStart: Boolean) {
if (isStart) {
TaxiPassengerModelLoopManager.getInstance().startReadyToAutopilot()
BizLoopManager.setLoopFunction(STARTREADYTOAUTOPILOT, LoopInfo(1, TaxiPassengerModel::loopQueryPilotStatus))
CallerLogger.i(M_TAXI_P + TAG, "startReadyToAutopilot()")
} else {
TaxiPassengerModelLoopManager.getInstance().stopReadyToAutopilot()
BizLoopManager.removeLoopFunction(STARTREADYTOAUTOPILOT)
CallerLogger.i(M_TAXI_P + TAG, "stopReadyToAutopilot()")
}
}
@@ -747,7 +747,7 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
fun startAutopilot() {
if (!checkCurrentOCHOrder()) {
e(SceneConstant.M_TAXI_P + TAG, "no order or order is empty.")
e(M_TAXI_P + TAG, "no order or order is empty.")
ToastUtils.showShort("当前订单不存在或异常!")
return
}
@@ -769,12 +769,12 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
}
val parameters = initAutopilotControlParameters()
if (parameters == null) {
d(SceneConstant.M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
d(M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
return
}
startAutoPilot(parameters)
d(
SceneConstant.M_TAXI_P + TAG,
M_TAXI_P + TAG,
"start autopilot with parameter: %s",
GsonUtil.jsonFromObject(parameters)
+ " ,startSiteName=" + currentOCHOrder!!.startSiteAddr
@@ -791,7 +791,7 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
if (!checkCurrentOCHOrder()) {
e(SceneConstant.M_TAXI_P + TAG, "no order or order is empty.")
e(M_TAXI_P + TAG, "no order or order is empty.")
ToastUtils.showShort("当前订单不存在或异常!")
return null
}
@@ -827,15 +827,15 @@ object TaxiPassengerModel : IOCHTaxiPassengerNaviChangedCallback {
fun updateAutopilotControlParameters() {
val parameters = initAutopilotControlParameters()
if (null == parameters) {
e(SceneConstant.M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
e(M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
return
}
d(SceneConstant.M_TAXI_P + TAG, "AutopilotControlParameters is update.")
d(M_TAXI_P + TAG, "AutopilotControlParameters is update.")
updateAutopilotControlParameters(parameters)
}
fun clearAutopilotControlParameters() {
d(SceneConstant.M_TAXI_P + TAG, "AutopilotControlParameters is clear.")
d(M_TAXI_P + TAG, "AutopilotControlParameters is clear.")
updateAutopilotControlParameters(null)
}

View File

@@ -1,114 +0,0 @@
package com.mogo.och.taxi.passenger.model;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/**
* Created on 2021/9/10
*
* 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等)
*/
public class TaxiPassengerModelLoopManager {
private static final String TAG = TaxiPassengerModelLoopManager.class.getSimpleName();
private static final class SingletonHolder {
private static final TaxiPassengerModelLoopManager INSTANCE = new TaxiPassengerModelLoopManager();
}
public static TaxiPassengerModelLoopManager getInstance() {
return SingletonHolder.INSTANCE;
}
private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询
private Disposable mQueryOrderRemainingDisposable; //心跳轮询
private CompositeDisposable mRouteWipeDisposable; //轨迹擦除
private Disposable mReadyToAutopilotDisposable; //轮询是否可开启自动驾驶
public void startReadyToAutopilot() {
if (mReadyToAutopilotDisposable != null && !mReadyToAutopilotDisposable.isDisposed()) {
return;
}
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startReadyToAutopilot()");
mReadyToAutopilotDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS)
.map((aLong -> aLong + 1))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> TaxiPassengerModel.INSTANCE.loopQueryPilotStatus());
}
public void stopReadyToAutopilot() {
if (mReadyToAutopilotDisposable != null) {
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopReadyToAutopilot()");
mReadyToAutopilotDisposable.dispose();
mReadyToAutopilotDisposable = null;
}
}
public void stopRouteAndWipe() {
if (mRouteWipeDisposable != null) {
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopRouteAndWipe()");
mRouteWipeDisposable.dispose();
mRouteWipeDisposable = null;
}
}
public void startInAndWaitOrdersLoop() {
if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) {
return;
}
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startInAndWaitOrdersLoop()");
mInAndWaitServiceDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
TaxiPassengerConst.LOOP_PERIOD_2S, TimeUnit.MILLISECONDS)
.map((aLong -> aLong + 1))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> TaxiPassengerModel.INSTANCE.queryInAndWaitOrders());
}
public void stopInAndWaitOrdersLoop() {
if (mInAndWaitServiceDisposable != null) {
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopInAndWaitOrdersLoop()");
mInAndWaitServiceDisposable.dispose();
mInAndWaitServiceDisposable = null;
}
}
/**
* 轮训查下 查询订单剩余里程和时间
*/
public void startQueryOrderRemainingLoop() {
if (mQueryOrderRemainingDisposable != null && !mQueryOrderRemainingDisposable.isDisposed()) {
return;
}
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startQueryOrderRemainingLoop()");
mQueryOrderRemainingDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
TaxiPassengerConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS)
.map((aLong -> aLong + 1))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> TaxiPassengerModel.INSTANCE.queryOrderRemaining());
}
public void stopQueryOrderRemainingLoop() {
if (mQueryOrderRemainingDisposable != null) {
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopQueryOrderRemainingLoop()");
mQueryOrderRemainingDisposable.dispose();
mQueryOrderRemainingDisposable = null;
}
}
}