添加自动计算剩余距离的逻辑、添加通过sn也可以请求未完成订单的逻辑

This commit is contained in:
wangcongtao
2021-01-26 19:47:45 +08:00
parent 85526c021c
commit 71061385ff
5 changed files with 106 additions and 25 deletions

View File

@@ -6,6 +6,7 @@ import android.text.TextUtils;
import com.mogo.commons.data.BaseData;
import com.mogo.commons.network.SubscribeImpl;
import com.mogo.commons.network.Utils;
import com.mogo.map.MogoLatLng;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
@@ -480,7 +481,7 @@ class MogoOCHTaxiModel {
if ( mOCHTaxiServiceApi == null ) {
mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi().create( OCHTaxiServiceApi.class, HostConst.OCH_DOMAIN );
}
mOCHTaxiServiceApi.updateOrderStatus( new OCHTaxiOrderStatus( mCurrentOCHOrder.orderNo, orderStatus.getCode() ) )
mOCHTaxiServiceApi.updateOrderStatus( new OCHTaxiOrderStatus( Utils.getSn(), mCurrentOCHOrder.orderNo, orderStatus.getCode() ) )
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() )
.subscribe( new SubscribeImpl< BaseData >( RequestOptions.create( mContext ) ) {
@@ -522,7 +523,7 @@ class MogoOCHTaxiModel {
if ( mOCHTaxiServiceApi == null ) {
mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi().create( OCHTaxiServiceApi.class, HostConst.OCH_DOMAIN );
}
mOCHTaxiServiceApi.queryOrder( new OCHTaxiOrderStatus( orderNo, OCHOrderStatus.None.getCode() ) )
mOCHTaxiServiceApi.queryOrder( new OCHTaxiOrderStatus( Utils.getSn(), orderNo, OCHOrderStatus.None.getCode() ) )
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() )
.subscribe( new SubscribeImpl< OCHTaxiOrderResponse2 >( RequestOptions.create( mContext ) ) {

View File

@@ -29,6 +29,16 @@ class OCHTaxiOrderResponse implements Parcelable {
// 站点
public List< OCHTaxiStation > drivingRoutes;
/**
* @param distance
*/
public void decreaseTravelDistance( double distance ) {
travelDistance -= ( ( float ) distance / 1000f );
if ( travelDistance < 0 ) {
travelDistance = 0;
}
}
public static class OCHTaxiStation implements Parcelable {
public String siteId;
public String siteName;

View File

@@ -5,14 +5,19 @@ public
* @author congtaowang
* @since 2021/1/15
*
* 修改网约车-出租车订单状态的数据结构
* 修改/查询网约车-出租车订单状态的数据结构
*/
class OCHTaxiOrderStatus {
public String sn;// 不排除本地没有缓存订单号的情况
public String orderNo;
public int orderDispatchType;
public OCHTaxiOrderStatus( String orderNo, int orderDispatchType ) {
public OCHTaxiOrderStatus( String sn,
String orderNo,
int orderDispatchType ) {
this.sn = sn;
this.orderNo = orderNo;
this.orderDispatchType = orderDispatchType;
}

View File

@@ -1,12 +1,14 @@
package com.mogo.och.taxi.ui;
import android.location.Location;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.mogo.map.MogoLatLng;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.BaseOchFragment;
import com.mogo.och.taxi.IMogoADASAutoPilotStatusChangedListener;
@@ -19,11 +21,11 @@ import com.mogo.och.view.SlidePanelView;
import com.mogo.service.adas.IMogoAdasOCHCallback;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.utils.CoordinateUtils;
import com.mogo.utils.TipToast;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.logger.Logger;
import java.util.UUID;
public
/**
* @author congtaowang
@@ -34,7 +36,8 @@ public
class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView,
IMogoStatusChangedListener,
IMogoOCHTaxiArriveCallback,
IMogoADASAutoPilotStatusChangedListener {
IMogoADASAutoPilotStatusChangedListener,
IMogoCarLocationChangedListener2 {
public static final String TAG = "OCHTaxiFragment";
@@ -71,7 +74,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
mDistance = findViewById( R.id.module_och_taxi_order_distance );
initListeners();
initOrderStatus();
updateOrderStatus();
if ( MogoApisHandler.getInstance()
.getApis()
.getStatusManagerApi()
@@ -89,6 +92,10 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
.registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( this );
OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( this );
MogoApisHandler.getInstance()
.getApis()
.getRegisterCenterApi()
.registerCarLocationChangedListener( TAG, this );
}
@NonNull
@@ -122,12 +129,11 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
}
}
private void initOrderStatus() {
if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation );
mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation );
mDistance.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance + " km" );
}
/**
* 初始化订单信息
*/
private void updateOrderStatus() {
updateOrderBaseStatusInfo();
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
Logger.d( TAG, "已经达到终点" );
slidePanelView.setVisibility( View.VISIBLE );
@@ -144,7 +150,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
Logger.d( TAG, "乘客已上车" );
if ( MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE ) {
slidePanelView.setVisibility( View.VISIBLE );
} else if ( MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE ) {
} else {
slidePanelView.setVisibility( View.GONE );
}
slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_start_station ) );
@@ -156,23 +162,34 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
}
}
/**
* 更新订单基本信息
*/
private void updateOrderBaseStatusInfo() {
if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation );
mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation );
mDistance.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance + " km" );
}
}
@Override
public void onArriveAtStartStation() {
Logger.d( TAG, "通知达到起点" );
initOrderStatus();
updateOrderStatus();
}
@Override
public void onTheWay2StartStation() {
Logger.d( TAG, "去往上车站点" );
initOrderStatus();
updateOrderStatus();
}
@Override
public void onArriveAtEndStation() {
Logger.d( TAG, "通知达到终点" );
onAutopilotStatusChanged( false );
initOrderStatus();
updateOrderStatus();
MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.ArriveAtEndStation, new OCHOrderStatusCallback() {
@Override
public void onSuccess( Object data ) {
@@ -190,19 +207,23 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
Logger.d( TAG, "更新状态失败2" );
}
} );
MogoApisHandler.getInstance()
.getApis()
.getRegisterCenterApi()
.unregisterCarLocationChangedListener( TAG, this );
}
@Override
public void onTheWay2EndStation() {
Logger.d( TAG, "通知去往终点" );
onAutopilotStatusChanged( true );
initOrderStatus();
updateOrderStatus();
}
@Override
public void onUserArriveAtStartStation() {
Logger.d( TAG, "通知乘客已上车" );
initOrderStatus();
updateOrderStatus();
}
@Override
@@ -214,6 +235,10 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
.unregisterStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( null );
OCHTaxiUiController.getInstance().setAutoPilotStatusChangedListener( null );
MogoApisHandler.getInstance()
.getApis()
.getRegisterCenterApi()
.unregisterCarLocationChangedListener( TAG, this );
}
@Override
@@ -253,11 +278,11 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
@Override
public void onAutoPilotStatusChanged( int status, String reason ) {
Logger.d( TAG, "status = %s, reason = %s", status, reason );
TipToast.shortTip( reason );
if ( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING ) {
resetOCHTaxiOrderAutopilotStatus();
} else {
initOrderStatus();
TipToast.shortTip( reason );
updateOrderStatus();
}
}
@@ -284,4 +309,40 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
}
} );
}
@Override
public void onCarLocationChanged( MogoLatLng latLng ) {
}
private Location mLocation;
@Override
public void onCarLocationChanged2( Location location ) {
OCHTaxiUiController.getInstance().runOnUIThread( () -> {
calculateTravelDistance( location );
} );
}
/**
* 根据位置信息计算当前剩余距离
*
* @param location
*/
private void calculateTravelDistance( Location location ) {
if ( location == null ) {
return;
}
if ( mLocation == null ) {
mLocation = location;
}
double distance = CoordinateUtils.calculateLineDistance(
location.getLongitude(), location.getLatitude(),
mLocation.getLongitude(), mLocation.getLatitude()
);
if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().decreaseTravelDistance( distance );
updateOrderBaseStatusInfo();
}
}
}

View File

@@ -102,7 +102,11 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback, IMogoADASAutoPi
@Override
public void onTheWay2StartStation() {
runOnUIThread( () -> {
if ( mOCHTaxiArriveCallback != null ) {
mOCHTaxiArriveCallback.onTheWay2StartStation();
}
} );
}
@Override
@@ -141,7 +145,7 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback, IMogoADASAutoPi
} );
}
private void runOnUIThread( Runnable executor ) {
public void runOnUIThread( Runnable executor ) {
if ( executor == null ) {
return;
}