From 71061385ffa652f46f8cd97d164943165e10a968 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 26 Jan 2021 19:47:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=8A=A8=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=89=A9=E4=BD=99=E8=B7=9D=E7=A6=BB=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E3=80=81=E6=B7=BB=E5=8A=A0=E9=80=9A=E8=BF=87sn?= =?UTF-8?q?=E4=B9=9F=E5=8F=AF=E4=BB=A5=E8=AF=B7=E6=B1=82=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E8=AE=A2=E5=8D=95=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/taxi/MogoOCHTaxiModel.java | 5 +- .../mogo/och/taxi/OCHTaxiOrderResponse.java | 10 ++ .../com/mogo/och/taxi/OCHTaxiOrderStatus.java | 9 +- .../com/mogo/och/taxi/ui/OCHTaxiFragment.java | 99 +++++++++++++++---- .../mogo/och/taxi/ui/OCHTaxiUiController.java | 8 +- 5 files changed, 106 insertions(+), 25 deletions(-) diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java index 42859e80c4..3c8722af68 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java @@ -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 ) ) { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java index be3e55ad65..f969f4e47a 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderResponse.java @@ -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; diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java index deadfa38a2..061dcd6f79 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/OCHTaxiOrderStatus.java @@ -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; } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java index c66b86c7ea..4a60bee679 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java @@ -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(); + } + } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java index 4af734c67a..2992c439ef 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java @@ -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; }