重新联网时刷新订单状态

This commit is contained in:
wangcongtao
2021-01-27 19:18:35 +08:00
parent 3d10f31737
commit ce1a5f9396
4 changed files with 85 additions and 30 deletions

View File

@@ -1,7 +1,9 @@
package com.mogo.och.taxi;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.net.ConnectivityManager;
import android.text.TextUtils;
import com.mogo.commons.data.BaseData;
@@ -16,7 +18,10 @@ import com.mogo.service.adas.IMogoAdasOCHCallback;
import com.mogo.service.adas.RemoteControlAutoPilotParameters;
import com.mogo.service.adas.entity.AdasOCHData;
import com.mogo.service.connection.IMogoOnMessageListener;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.utils.CoordinateUtils;
import com.mogo.utils.NetworkUtils;
import com.mogo.utils.TipToast;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.RequestOptions;
import com.mogo.utils.network.utils.GsonUtil;
@@ -112,25 +117,43 @@ class MogoOCHTaxiModel {
.getApis()
.getAdasControllerApi()
.addAdasOCHCallback( mNotifyCallback = new OCHArriveNotifyCallback() );
// 订单恢复
String orderInfo = SharedPrefsMgr.getInstance( mContext ).getString( SP_KEY_OCH_TAXI_ORDER );
if ( !TextUtils.isEmpty( orderInfo ) ) {
mCurrentOCHOrder = GsonUtil.objectFromJson( orderInfo, OCHTaxiOrderResponse.class );
if ( mCurrentOCHOrder == null ) {
clearCurrentOCHOrder();
return;
}
mRetryCounter = 0;
queryOldOrder2RestoreOrderStatus( mCurrentOCHOrder.orderNo );
} else {
// 解决本地没有缓存订单号的问题
queryOldOrder2RestoreOrderStatus( null );
MogoApisHandler.getInstance()
.getApis()
.getIntentManagerApi()
.registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener );
if ( NetworkUtils.isConnected( mContext ) ) {
restoreOrderInfo();
}
}
/**
* 查询订单状态,来恢复订单因crash导致应用重启等状态
* 重新恢复订单状态
*/
private void restoreOrderInfo() {
Logger.d( TAG, "重新查询订单状态" );
mRetryCounter = 0;
if ( mCurrentOCHOrder == null ) {
// 订单恢复
String orderInfo = SharedPrefsMgr.getInstance( mContext ).getString( SP_KEY_OCH_TAXI_ORDER );
if ( !TextUtils.isEmpty( orderInfo ) ) {
mCurrentOCHOrder = GsonUtil.objectFromJson( orderInfo, OCHTaxiOrderResponse.class );
if ( mCurrentOCHOrder == null ) {
// 解决本地没有缓存订单号的问题
query2RestoreOrderStatus( null );
} else {
query2RestoreOrderStatus( mCurrentOCHOrder.orderNo );
}
} else {
// 解决本地没有缓存订单号的问题
query2RestoreOrderStatus( null );
}
} else {
query2RestoreOrderStatus( mCurrentOCHOrder.orderNo );
}
}
/**
* 查询订单状态来恢复旧订单因crash导致应用重启、断网没收到推送等状态
* <p>
* 已结束、已取消:清除订单状态
* 已到达目的地更新UI显示到达目的地状态
@@ -141,26 +164,34 @@ class MogoOCHTaxiModel {
*
* @param orderNo
*/
private void queryOldOrder2RestoreOrderStatus( String orderNo ) {
private void query2RestoreOrderStatus( String orderNo ) {
queryOCHOrderStatus( orderNo, new OCHOrderStatusCallback< OCHTaxiOrderResponse2 >() {
@Override
public void onSuccess( OCHTaxiOrderResponse2 data ) {
if ( data == null || data.result == null ) {
TipToast.shortTip( "订单已取消或已完成" );
clearCurrentOCHOrder();
OCHTaxiUiController.getInstance().removeFragment();
return;
}
convertCurrentOrder( data );
OCHOrderStatus status = OCHOrderStatus.valueOf( data.result.orderDispatchType );
switch ( status ) {
case Completed:
case Cancel:
TipToast.shortTip( "订单已完成" );
clearCurrentOCHOrder();
OCHTaxiUiController.getInstance().removeFragment();
break;
case Cancel:
TipToast.shortTip( "订单已取消" );
clearCurrentOCHOrder();
OCHTaxiUiController.getInstance().removeFragment();
break;
case ArriveAtEndStation:
mIsArriveAtEndStation = true;
mIsArriveAtStartStation = true;
mIsArriveAtStartStation = false;
mIsOnTheWay2EndStation = false;
mIsUserArriveAtStartStation = true;
mIsUserArriveAtStartStation = false;
OCHTaxiUiController.getInstance().addFragment();
break;
case ArriveAtStartStation:
@@ -178,10 +209,10 @@ class MogoOCHTaxiModel {
OCHTaxiUiController.getInstance().addFragment();
break;
case OnTheWayToEndStation:
mIsArriveAtStartStation = true;
mIsArriveAtStartStation = false;
mIsArriveAtEndStation = false;
mIsOnTheWay2EndStation = true;
mIsUserArriveAtStartStation = true;
mIsUserArriveAtStartStation = false;
OCHTaxiUiController.getInstance().addFragment();
break;
case OnTheWayToStartStation:
@@ -200,7 +231,7 @@ class MogoOCHTaxiModel {
if ( mRetryCounter++ > 3 ) {
return;
}
queryOldOrder2RestoreOrderStatus( orderNo );
query2RestoreOrderStatus( orderNo );
}
@Override
@@ -237,6 +268,21 @@ class MogoOCHTaxiModel {
cacheOrderInfo2Native( mCurrentOCHOrder );
}
/**
* 监听网络变化,避免启动机器时无网导致无法更新订单信息
*/
private IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() {
@Override
public void onIntentReceived( String intentStr, Intent intent ) {
Logger.d( TAG, "onIntentReceived = %s", intentStr );
if ( ConnectivityManager.CONNECTIVITY_ACTION.equals( intentStr ) ) {
if ( NetworkUtils.isConnected( mContext ) ) {
restoreOrderInfo();
}
}
}
};
/**
* 自车定位
*/

View File

@@ -62,7 +62,10 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
@Override
public void restartAutopilot() {
MogoOCHTaxiModel.getInstance().startAutoPilot();
// 在自动驾驶中,才会有重新开启自动驾驶的操作
if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
MogoOCHTaxiModel.getInstance().startAutoPilot();
}
}
@Override
@@ -170,6 +173,9 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation );
mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation );
double distance = MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance;
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
distance = 0;
}
if ( distance * 1000 >= 1000 ) {
mDistance.setText( String.format( "%.1f km", distance ) );
} else {
@@ -194,8 +200,8 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
@Override
public void onArriveAtEndStation() {
Logger.d( TAG, "通知达到终点" );
onAutopilotStatusChanged( false );
updateOrderStatus();
showNotice( "请携带好随身物品,注意侧后\n方来车感谢体验蘑菇智行自\n动驾驶车" );
MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.ArriveAtEndStation, new OCHOrderStatusCallback() {
@Override
public void onSuccess( Object data ) {
@@ -222,7 +228,6 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
@Override
public void onTheWay2EndStation() {
Logger.d( TAG, "通知去往终点" );
onAutopilotStatusChanged( true );
updateOrderStatus();
}
@@ -285,10 +290,10 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
@Override
public void onAutoPilotStatusChanged( int status, String reason ) {
Logger.d( TAG, "status = %s, reason = %s", status, reason );
onAutopilotStatusChanged( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING );
if ( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING ) {
resetOCHTaxiOrderAutopilotStatus();
} else {
TipToast.shortTip( reason );
updateOrderStatus();
}
}
@@ -343,6 +348,9 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
if ( !MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
return;
}
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
return;
}
if ( mLocation == null ) {
mLocation = location;
}

View File

@@ -8,7 +8,7 @@ import com.mogo.utils.network.utils.GsonUtil;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
public
/**
@@ -38,7 +38,7 @@ class LogWriter {
e.printStackTrace();
}
}
writeHandler = new Handler( WorkThreadHandler.newInstance( "Logger-Writer" ).getLooper() ) {
writeHandler = new Handler( WorkThreadHandler.newInstance( "Logger-Writer" + new Random().nextLong() ).getLooper() ) {
@Override
public void handleMessage( Message msg ) {
super.handleMessage( msg );

View File

@@ -16,6 +16,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @author congtaowang
@@ -45,7 +46,7 @@ public class IntentManager implements IMogoIntentManager {
sInstance = null;
}
private Map< String, List< IMogoIntentListener > > mListeners = new ConcurrentHashMap<>();
private Map< String, CopyOnWriteArrayList< IMogoIntentListener > > mListeners = new ConcurrentHashMap<>();
@Override
public void registerIntentListener( String intent, IMogoIntentListener listener ) {
@@ -53,7 +54,7 @@ public class IntentManager implements IMogoIntentManager {
return;
}
if ( !mListeners.containsKey( intent ) ) {
mListeners.put( intent, new ArrayList<>() );
mListeners.put( intent, new CopyOnWriteArrayList<>() );
}
mListeners.get( intent ).add( listener );
}