轮询修改到统一轮询
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user