From 2c6066d80533aa81f659f9d32e3bfafca246f3a4 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 30 Mar 2022 10:21:24 +0800 Subject: [PATCH 1/7] [Taxi driver V2.6.5] opt --- .../TaxiPassengerOrderQueryRemainingResp.java | 20 +++ .../TaxiPassengerQueryOrderRouteResp.java | 17 +++ ...axiPassengerAutopilotPlanningCallback.java | 3 + .../IOCHTaxiPassengerNaviChangedCallback.java | 2 +- .../IOCHTaxiPassengerOrderStatusCallback.java | 5 +- .../passenger/model/TaxiPassengerModel.java | 73 +++++++-- .../model/TaxiPassengerModelLoopManager.java | 40 ++--- .../TaxiPassengerNaviToDestinationModel.java | 3 +- .../network/TaxiPassengerServiceApi.java | 21 ++- .../network/TaxiPassengerServiceManager.java | 34 +++++ .../presenter/BaseTaxiPassengerPresenter.java | 7 +- .../TaxiPassengerServingOrderPresenter.java | 23 ++- .../ui/TaxiPassengerMapDirectionView.java | 5 + .../ui/TaxiPassengerServingOrderFragment.java | 75 ++++++--- .../utils/TPCoordinateCalculateRouteUtil.java | 59 +++++++ .../taxi_p_activity_serving_order_view.xml | 2 +- .../och/taxi/bean/QueryOrderRouteResp.java | 17 +++ .../bean/UpdateOrderDisAndTimeReqBean.java | 14 ++ .../mogo/och/taxi/constant/OCHTaxiConst.kt | 5 + .../och/taxi/model/MogoOCHTaxiModelNew.java | 144 ++++++++++++++---- .../taxi/model/OCHTaxiModelLoopManager.java | 23 +++ .../taxi/network/OCHTaxiServiceApiNew.java | 19 +++ .../network/OCHTaxiServiceManagerNew.java | 43 ++++++ .../och/taxi/presenter/OCHTaxiPresenter.java | 3 + .../ui/OCHTaxiBeingServerdOrdersFragment.java | 30 +++- .../com/mogo/och/taxi/ui/OCHTaxiFragment.java | 1 + .../utils/CoordinateCalculateRouteUtil.java | 133 ++++++++++++++++ 27 files changed, 709 insertions(+), 112 deletions(-) create mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java create mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java create mode 100644 OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java create mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/QueryOrderRouteResp.java create mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/UpdateOrderDisAndTimeReqBean.java create mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/CoordinateCalculateRouteUtil.java diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java new file mode 100644 index 0000000000..3ff370d2c2 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java @@ -0,0 +1,20 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; +import java.util.Objects; + +/** + * Created by pangfan on 2021/8/19 + * + * 查询订单返回数据结构 + */ +public class TaxiPassengerOrderQueryRemainingResp extends BaseData { + public Result data; + + public static class Result { + public long distance; + public long duration; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java new file mode 100644 index 0000000000..d89e1c29d1 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java @@ -0,0 +1,17 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.amap.api.maps.model.LatLng; +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * Created by pangfan on 2021/8/19 + */ +public class TaxiPassengerQueryOrderRouteResp extends BaseData { + public Result data; + + public static class Result { + public List point; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java index e6b6ca23ae..3f1cb1bac3 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java @@ -1,6 +1,8 @@ package com.mogo.och.taxi.passenger.callback; +import com.amap.api.maps.model.LatLng; + import java.util.List; import mogo.telematics.pad.MessagePad; @@ -10,4 +12,5 @@ import mogo.telematics.pad.MessagePad; */ public interface IOCHTaxiPassengerAutopilotPlanningCallback { void routeResult(List models); + void routeResultByServer(List models); } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java index fdd93e1015..c7060e2aaf 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java @@ -6,6 +6,6 @@ package com.mogo.och.taxi.passenger.callback; */ public interface IOCHTaxiPassengerNaviChangedCallback { // 当前位置距离上车点的距离(米)、预估时间(秒) 、当前路的名称 - void onCurrentNaviDistAndTimeChanged(int meters, int timeInSecond, String currentRoadName); + void onCurrentRoadName(String currentRoadName); void reInitNaviAmap(boolean isPlay,boolean isRestart); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java index be5cf3c550..4f82627a0c 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java @@ -17,6 +17,9 @@ public interface IOCHTaxiPassengerOrderStatusCallback { void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order); // 当前位置距离上车点的距离(米)、预估时间(秒) - void onCurrentOrderDistToEndChanged(int meters, int timeInSecond, String currentRoadName); + void onCurrentOrderDistToEndChanged(long meters, long timeInSecond); + + //当前路名字 + void onCurrentRoadName(String currentRoadName); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index e3453380e0..9629b59e80 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -8,6 +8,7 @@ import android.os.Looper; import androidx.annotation.Nullable; +import com.amap.api.maps.model.LatLng; import com.amap.api.navi.model.NaviLatLng; import com.elegant.network.utils.GsonUtil; import com.mogo.cloud.commons.utils.CoordinateUtils; @@ -31,8 +32,10 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; import com.mogo.och.taxi.passenger.R; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp; import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback; import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback; import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback; @@ -43,6 +46,7 @@ import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceCallback; import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager; +import com.mogo.och.taxi.passenger.utils.TPCoordinateCalculateRouteUtil; import com.mogo.service.IMogoServiceApis; import com.mogo.service.cloud.socket.IMogoLifecycleListener; import com.mogo.service.intent.IMogoIntentListener; @@ -85,12 +89,6 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback private volatile List mInServiceList = Collections.emptyList(); //进行中订单 private volatile List mWaitServiceList = Collections.emptyList(); //待服务订单 - public void setmTtsLessThan200Tip(int ttsLessThan200Tip) { - this.mTtsLessThan200Tip = ttsLessThan200Tip; - } - - private volatile int mTtsLessThan200Tip = 0;//离终点200米提示播报 - private IOCHTaxiPassengerADASStatusCallback mADASStatusCallback; //Model->Presenter:自动驾驶状态相关 private IOCHTaxiPassengerAutopilotPlanningCallback mAutopilotPlanningCallback; //Model->Presenter:自动驾驶线路规划 @@ -546,6 +544,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback @Override public void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) { if (null != routeList && routeList.getWayPointsList().size() > 0){ + calculateRouteLineSum(TPCoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,routeList.getWayPointsList())); mAutopilotPlanningCallback.routeResult(routeList.getWayPointsList()); } } @@ -583,16 +582,57 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } } - @Override - public void onCurrentNaviDistAndTimeChanged(int meters, int timeInSecond, String currentRoadName) { - if (mTtsLessThan200Tip == 0 && meters <= 200){ - mTtsLessThan200Tip = 1; - runOnUIThread(() -> { - AIAssist.getInstance(mContext).speakTTSVoice(mContext.getString(R.string.taxi_p_arrive_end_tts_200)); - }); + public void startOrStopQueryOrderRemaining(boolean isStart){ + if (isStart){ + TaxiPassengerModelLoopManager.getInstance().startQueryOrderRemainingtLoop(); + }else { + TaxiPassengerModelLoopManager.getInstance().stopQueryOrderRemainingLoop(); } + } + + public void queryOrderRemaining(){ + if (mCurrentOCHOrder == null) return; + TaxiPassengerServiceManager.getInstance().queryOrderRemaining(mContext, mCurrentOCHOrder.orderNo, new TaxiPassengerServiceCallback() { + @Override + public void onSuccess(TaxiPassengerOrderQueryRemainingResp data) { + if (data != null && data.data!=null){ + for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ + callback.onCurrentOrderDistToEndChanged(data.data.distance,data.data.duration); + } + } + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + + public void queryOrderRouteList() { + if (mCurrentOCHOrder == null) return; + TaxiPassengerServiceManager.getInstance().queryOrderRouteList(mContext, mCurrentOCHOrder.orderNo, new TaxiPassengerServiceCallback() { + @Override + public void onSuccess(TaxiPassengerQueryOrderRouteResp data) { + if (data != null && data.data != null && data.data.point != null && data.data.point.size() > 0){ + if (mAutopilotPlanningCallback != null){ + calculateRouteLineSum(data.data.point); + mAutopilotPlanningCallback.routeResultByServer(data.data.point); + } + } + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + + @Override + public void onCurrentRoadName(String currentRoadName) { for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentOrderDistToEndChanged(meters,timeInSecond,currentRoadName); + callback.onCurrentRoadName(currentRoadName); } } @@ -609,6 +649,11 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback TaxiPassengerNaviToDestinationModel.getInstance(mContext).setFirstcalculateDriveRoute(0); } + public void calculateRouteLineSum(List points){ + float sumLength = TPCoordinateCalculateRouteUtil.calculateRouteSumLength(points); + SharedPrefsMgr.getInstance(mContext).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,(int) sumLength); + } + private void runOnUIThread(Runnable executor) { if (executor == null) { return; diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java index c7546b3554..b003fb606c 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java @@ -30,7 +30,7 @@ public class TaxiPassengerModelLoopManager { } private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询 - private Disposable mHeartbeatDisposable; //心跳轮询 + private Disposable mQueryOrderRemainingDisposable; //心跳轮询 public void startInAndWaitOrdersLoop() { if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) { @@ -54,24 +54,24 @@ public class TaxiPassengerModelLoopManager { } -// public void startHeartbeatLoop() { -// if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) { -// return; -// } -// CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startHeartbeatLoop()"); -// mHeartbeatDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, -// TaxiPassengerConst.LOOP_PERIOD_60S, TimeUnit.MILLISECONDS) -// .map((aLong -> aLong + 1)) -// .subscribeOn(Schedulers.io()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(aLong -> TaxiPassengerModel.getInstance().runCarHeartbeat()); -// } + public void startQueryOrderRemainingtLoop() { + if (mQueryOrderRemainingDisposable != null && !mQueryOrderRemainingDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startQueryOrderRemainingtLoop()"); + mQueryOrderRemainingDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, + TaxiPassengerConst.LOOP_PERIOD_60S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> TaxiPassengerModel.getInstance().queryOrderRemaining()); + } -// public void stopHeartbeatLoop() { -// if (mHeartbeatDisposable != null) { -// CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopHeartbeatLoop()"); -// mHeartbeatDisposable.dispose(); -// mHeartbeatDisposable = null; -// } -// } + public void stopQueryOrderRemainingLoop() { + if (mQueryOrderRemainingDisposable != null) { + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopQueryOrderRemainingLoop()"); + mQueryOrderRemainingDisposable.dispose(); + mQueryOrderRemainingDisposable = null; + } + } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerNaviToDestinationModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerNaviToDestinationModel.java index e691431c75..3f7367b404 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerNaviToDestinationModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerNaviToDestinationModel.java @@ -140,8 +140,7 @@ public class TaxiPassengerNaviToDestinationModel implements AMapNaviListener { SharedPrefsMgr.getInstance(mContext).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,naviinfo.getPathRetainDistance()); } if (null != mNaviChangedCallback){ - mNaviChangedCallback.onCurrentNaviDistAndTimeChanged(naviinfo.getPathRetainDistance() - ,naviinfo.getPathRetainTime(),naviinfo.getCurrentRoadName());// 米、秒 + mNaviChangedCallback.onCurrentRoadName(naviinfo.getCurrentRoadName());//当前路的名字 } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java index 96ba82cacc..264cd37876 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java @@ -1,9 +1,9 @@ package com.mogo.och.taxi.passenger.network; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerCarHeartbeatReqBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp; import io.reactivex.Observable; import retrofit2.http.Body; @@ -42,11 +42,18 @@ interface TaxiPassengerServiceApi { Observable queryOrderById(@Header ("appId") String appId,@Header("ticket") String ticket,@Body TaxiPassengerOrderQueryReqBean data); /** - * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 - * @param data + * 查询订单剩余里程和时间 + * @param appId + * @param ticket + * @param orderNo * @return */ -// @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @POST( "/autopilot-car-hailing/api/v1/driver/heartbeat" ) -// Observable runCarHeartbeat(@Body TaxiPassengerCarHeartbeatReqBean data); + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining") + Observable queryOrderRemaining(@Header("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); + + @Headers( {"Content-type:application/json;charset=UTF-8"} ) +// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) + @GET( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderRoute" ) + Observable queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java index 753f04929f..a8d3c2cd88 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java @@ -11,9 +11,11 @@ import com.mogo.eagle.core.network.RequestOptions; import com.mogo.eagle.core.network.SubscribeImpl; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp; import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -71,6 +73,38 @@ public class TaxiPassengerServiceManager { .subscribe(getSubscribeImpl(context, callback, "queryOrdersInAndWaitService")); } + /** + * 查询订单剩余里程和时间 + * @param context + * @param orderNo + * @param callback + */ + public void queryOrderRemaining(Context context, String orderNo, TaxiPassengerServiceCallback callback){ + if (mOCHTaxiServiceApi == null) { + mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() + .create(TaxiPassengerServiceApi.class, baseUrl); + } + mOCHTaxiServiceApi.queryOrderRemaining(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,orderNo) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context, callback, "queryOrderRemaining")); + } + + public void queryOrderRouteList(Context context, String orderNo, TaxiPassengerServiceCallback callback){ + if (mOCHTaxiServiceApi == null) { + mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() + .create(TaxiPassengerServiceApi.class, baseUrl); + } + mOCHTaxiServiceApi.queryOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,orderNo) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context, callback, "queryOrderRouteList")); + } + /** * 通过orderId查询订单信息(用于本地已经有orderId时) * @param context diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index d060812f85..9784dd2fc0 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -132,7 +132,12 @@ public class BaseTaxiPassengerPresenter extends Presenter models) { + if (models == null) return; + mView.routeResultByServer(models); + } + @Override public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) { if (mCurrentPassengerOrder == null){ @@ -81,9 +88,14 @@ public class TaxiPassengerServingOrderPresenter extends Presenter latLngs){ + mCoordinatesLatLng.clear(); + mCoordinatesLatLng.addAll(latLngs); + } + @Override public void onCameraChange(CameraPosition cameraPosition) { mITaxiPassengerMapViewCallback.onCameraChange(cameraPosition.bearing); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java index 88efec1c08..400f04b4b7 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java @@ -18,6 +18,7 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.appcompat.widget.AppCompatSeekBar; +import com.amap.api.maps.model.LatLng; import com.mogo.commons.mvp.MvpFragment; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; @@ -61,6 +62,7 @@ public class TaxiPassengerServingOrderFragment extends private TextView mTPOrderStartStation; private TextView mTPOrderEndStation; private TextView mTPOrderRemainDis; + private TextView mTPOrderRemainDisUnit; private TextView mTPOrderRemainTime; private TextView mTPOrderRemainArriveTime; private ImageView mMapArrowIcon; @@ -109,6 +111,7 @@ public class TaxiPassengerServingOrderFragment extends mTPOrderStartStation = findViewById(R.id.taxi_p_order_status_start_station_tv); mTPOrderEndStation = findViewById(R.id.taxi_p_order_status_end_station_tv); mTPOrderRemainDis = findViewById(R.id.taxi_p_order_remain_distance); + mTPOrderRemainDisUnit = findViewById(R.id.taxi_p_order_remain_distance_unit); mTPOrderRemainTime = findViewById(R.id.taxi_p_order_remain_time); mTPOrderRemainArriveTime = findViewById(R.id.taxi_p_order_remain_arrive_time); @@ -346,9 +349,9 @@ public class TaxiPassengerServingOrderFragment extends * 行驶进度值更新 */ @RequiresApi(api = Build.VERSION_CODES.N) - private void updateDriveProcessLoading(int progressLoading,String currentRoadName) { - mProgessDes.setText(currentRoadName); - int progressInt = SharedPrefsMgr.getInstance(getContext()).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,0) - progressLoading; + private void updateDriveProcessLoading(int progressLoading) { + int progressInt = SharedPrefsMgr.getInstance(getContext()) + .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,0) - progressLoading; CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"progressInt = "+progressInt); mProgressSeekBar.setProgress( progressInt @@ -356,6 +359,9 @@ public class TaxiPassengerServingOrderFragment extends mProgressSeekBar.jumpDrawablesToCurrentState(); } + private void updateDriveRoadName(String currentRoadName){ + mProgessDes.setText(currentRoadName); + } @Override public void onResume() { @@ -405,6 +411,15 @@ public class TaxiPassengerServingOrderFragment extends } } + public void routeResultByServer(List latLngList) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "routeResultByServer:" + latLngList.size()); + if (latLngList.size() > 0) { + drawablePolylineByServerRoute(latLngList); + } else { + clearPolyline(); + } + } + /** * 绘制 * @@ -422,6 +437,17 @@ public class TaxiPassengerServingOrderFragment extends } } + public void drawablePolylineByServerRoute(List mCoordinatesLatLng){ + if (mMapDirectionView != null){ + mMapDirectionView.setCoordinatesLatLng(mCoordinatesLatLng); + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.drawablePolyline(); + } + }); + } + } private void clearPolyline() { if (mMapDirectionView != null) { UiThreadHandler.post(new Runnable() { @@ -452,26 +478,39 @@ public class TaxiPassengerServingOrderFragment extends /** * 剩余里程,剩余时间,当前定位点所在道路 - * @param meters - * @param timeInSecond - * @param currentRoadName + * @param meters 单位 米 + * @param remainTime 单位 分钟 */ @RequiresApi(api = Build.VERSION_CODES.N) - public void onCurrentOrderDistToEndChanged(int meters, int timeInSecond, String currentRoadName) { - DecimalFormat fnum = new DecimalFormat("##0.00"); - String remainDis = fnum.format((float) meters / 1000); - int remainTime = (int) timeInSecond / 60; + public void onCurrentOrderDistToEndChanged(long meters, long remainTime) { + String disUnit = "公里"; + String remainDis = ""; + if (meters / 1000 < 1){ + disUnit = "米"; + remainDis = String.valueOf(Math.round(meters)); + }else { + disUnit = "公里"; + DecimalFormat fnum = new DecimalFormat("##0.00"); + remainDis = fnum.format((float) meters / 1000); + } + int time = new Long(remainTime).intValue(); Calendar beforeTime = Calendar.getInstance(); - beforeTime.add(Calendar.MINUTE,remainTime); + beforeTime.add(Calendar.MINUTE,time); String arriveTime = TaxiPassengerUtils.formatCalendarToString(beforeTime,TaxiPassengerUtils.TAXI_HH_mm); - updateOrderDisAndTimeView(remainDis, remainTime, arriveTime); - updateDriveProcessLoading(meters,currentRoadName); + updateOrderDisAndTimeView(remainDis, disUnit,time, arriveTime); + updateDriveProcessLoading(new Long(meters).intValue()); } - private void updateOrderDisAndTimeView(String remainDis, int remainTime, String arriveTime) { + public void onCurrentRoadName(String roadName){ + updateDriveRoadName(roadName); + } + + private void updateOrderDisAndTimeView(String remainDis, String remainDisUnit, int remainTime, String arriveTime) { mTPOrderRemainDis.setText(remainDis); + mTPOrderRemainDisUnit.setText(remainDisUnit); mTPOrderRemainTime.setText(String.valueOf(remainTime)); mTPOrderRemainArriveTime.setText(arriveTime); + } public void onCarLocationChanged(Location location) { @@ -537,12 +576,4 @@ public class TaxiPassengerServingOrderFragment extends lastBearing = bearing; } - public void setGradientText(int startColor, int endColor){ - Shader shader = new LinearGradient( - 0, 0, 0, mTPSpeedTv.getLineHeight(), - getResources().getColor(startColor), - getResources().getColor(endColor), - Shader.TileMode.REPEAT); - mTPSpeedTv.getPaint().setShader(shader); - } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java new file mode 100644 index 0000000000..99f3b2d98e --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java @@ -0,0 +1,59 @@ +package com.mogo.och.taxi.passenger.utils; + +import android.content.Context; + +import com.amap.api.maps.CoordinateConverter; +import com.amap.api.maps.model.LatLng; +import com.mogo.cloud.commons.utils.CoordinateUtils; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.och.taxi.bean.OrderRouteUpdateReqBean; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; + +/** + * @author: wangmingjun + * @date: 2022/3/28 + */ +public class TPCoordinateCalculateRouteUtil { + + public static float calculateRouteSumLength(List points){ + if (null == points || points.size() == 0) return 0; + + float sumLength = 0; + + //计算全路径总距离 + for (int i = 0;i + 1< points.size();i++){ + double preLat = points.get(i).latitude; + double preLon = points.get(i).longitude; + double laLat = points.get(i+1).latitude; + double laLon = points.get(i+1).longitude; + + float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); + sumLength += length; + } + return sumLength; + } + + public static List coordinateConverterWgsToGcjListCommon(Context mContext, List models) { + //转成MogoLatLng集合 + List list = new ArrayList<>(); + for (MessagePad.Location m : models) { + LatLng mogoLatLng = coordinateConverterWgsToGcj(mContext, m); + list.add(mogoLatLng); + } + return list; + } + + public static LatLng coordinateConverterWgsToGcj(Context mContext, MessagePad.Location mogoLatLng) { + CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); + mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); + mCoordinateConverter.coord(new LatLng(mogoLatLng.getLatitude(), mogoLatLng.getLongitude())); + LatLng latLng = mCoordinateConverter.convert(); + return latLng; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml index 6a8924c351..43cf0999dc 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml @@ -147,7 +147,7 @@ android:layout_marginLeft="@dimen/dp_6" android:layout_toRightOf="@+id/taxi_p_order_remain_distance" android:includeFontPadding="false" - android:text="KM" + android:text="公里" android:textColor="#FFFFFF" android:textSize="20px" /> diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/QueryOrderRouteResp.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/QueryOrderRouteResp.java new file mode 100644 index 0000000000..d5fe6cb7e5 --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/QueryOrderRouteResp.java @@ -0,0 +1,17 @@ +package com.mogo.och.taxi.bean; + +import com.amap.api.maps.model.LatLng; +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * Created by pangfan on 2021/8/19 + */ +public class QueryOrderRouteResp extends BaseData { + public Result data; + + public static class Result { + public List point; + } +} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/UpdateOrderDisAndTimeReqBean.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/UpdateOrderDisAndTimeReqBean.java new file mode 100644 index 0000000000..29e7e2b0e8 --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/UpdateOrderDisAndTimeReqBean.java @@ -0,0 +1,14 @@ +package com.mogo.och.taxi.bean; + + +public class UpdateOrderDisAndTimeReqBean { + public String orderNo; //订单号(必须) + public long distance; //剩余里程 单位米(必须) + public long duration; //剩余时间 单位秒(必须) + + public UpdateOrderDisAndTimeReqBean(String orderNo, long distance, long duration) { + this.orderNo = orderNo; + this.distance = distance; + this.duration = duration; + } +} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt index edb45a2521..bdb2197b36 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt @@ -59,5 +59,10 @@ class OCHTaxiConst { const val EVENT_PARAM_ORDER_NUMBER = "order_num" const val EVENT_PARAM_START_RESULT = "start_autopilot" // true/false + // 轮询查询进行中/待服务订单的间隔时间 2秒 + const val LOOP_CALCULATEROUTE_2S = 2 * 1000L + + //总里程/平均车速。(bus的平均里程:25km/h,taxi的平均里程:38km/h),单位为:分钟,不足1分钟时,显示1分钟。 + const val TAXI_AVERAGE_SPEED = 38 } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java index ddd574d459..d08638bacf 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java @@ -1,6 +1,7 @@ package com.mogo.och.taxi.model; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; import android.content.Context; import android.content.Intent; @@ -9,7 +10,6 @@ import android.net.ConnectivityManager; import androidx.annotation.Nullable; -import com.amap.api.maps.CoordinateConverter; import com.amap.api.maps.model.LatLng; import com.elegant.network.utils.GsonUtil; import com.mogo.cloud.commons.utils.CoordinateUtils; @@ -26,9 +26,11 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.eagle.core.utilcode.util.SharedPrefs; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; import com.mogo.och.taxi.bean.DriverServiceDataRespBean; @@ -41,6 +43,7 @@ import com.mogo.och.taxi.bean.OrderRouteUpdateReqBean; import com.mogo.och.taxi.bean.OrdersInServiceQueryRespBean; import com.mogo.och.taxi.bean.OrdersListQueryRespBean; import com.mogo.och.taxi.bean.OrdersNewBookingQueryRespBean; +import com.mogo.och.taxi.bean.QueryOrderRouteResp; import com.mogo.och.taxi.callback.IOCHTaxiADASStatusCallback; import com.mogo.och.taxi.callback.IOCHTaxiCarStatusCallback; import com.mogo.och.taxi.callback.IOCHTaxiControllerStatusCallback; @@ -51,6 +54,7 @@ import com.mogo.och.taxi.constant.OrderStatusEnum; import com.mogo.och.taxi.constant.OrderTypeEnum; import com.mogo.och.taxi.network.OCHTaxiServiceCallback; import com.mogo.och.taxi.network.OCHTaxiServiceManagerNew; +import com.mogo.och.taxi.utils.CoordinateCalculateRouteUtil; import com.mogo.och.taxi.utils.OchTaxiAnalyticsUtil; import com.mogo.och.taxi.utils.OrderUtil; import com.mogo.och.taxi.utils.PinYinUtil; @@ -104,16 +108,14 @@ public class MogoOCHTaxiModelNew { private IOCHTaxiControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 private IOCHTaxiOrderStatusCallback mOrderStatusCallback; //Model->Presenter:订单变更 -// private IOCHTaxiAutopilotPlanningCallback mAutopilotPlanningCallback; //Model->Presenter:自动驾驶线路规划 + private List mRoutePoints = new ArrayList<>(); +// private float mSumLength = 0; private double mLongitude, mLatitude; private MogoOCHTaxiModelNew() { } -// public void setMoGoAutopilotPlanningListener(IOCHTaxiAutopilotPlanningCallback -// moGoAutopilotPlanningCallback) { -// this.mAutopilotPlanningCallback = moGoAutopilotPlanningCallback; -// } + public void setADASStatusCallback(IOCHTaxiADASStatusCallback callback) { this.mADASStatusCallback = callback; } @@ -192,6 +194,7 @@ public class MogoOCHTaxiModelNew { public void release() { startOrStopOrderLoop(false); + startOrStopCalculateRouteInfo(false); releaseListeners(); } @@ -853,12 +856,6 @@ public class MogoOCHTaxiModelNew { // mOrderStatusCallback.onCurrentOrderDistToStartChanged((long) distance, 0); // } - if (distance > OCHTaxiConst.ARRIVE_AT_START_STATION_DISTANCE) { - distance = CoordinateUtils.calculateLineDistance(startLon, startLat, - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(), - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat()); - } - if (distance <= OCHTaxiConst.ARRIVE_AT_START_STATION_DISTANCE) { updateOCHOrderStatus(OrderStatusEnum.ArriveAtStartStation); return; @@ -945,9 +942,10 @@ public class MogoOCHTaxiModelNew { if (location != null && checkCurrentOCHOrder()) { if (getCurOrderStatus() == OrderStatusEnum.OnTheWayToStartStation) { judgeStartStation(location); - } else if (getCurOrderStatus() == OrderStatusEnum.OnTheWayToEndStation) { - calculateTravelDistance(location); } +// else if (getCurOrderStatus() == OrderStatusEnum.OnTheWayToEndStation) { +// calculateTravelDistance(location); +// } } mLongitude = location.getLongitude(); mLatitude = location.getLatitude(); @@ -1066,6 +1064,7 @@ public class MogoOCHTaxiModelNew { public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) { if (null != routeList && routeList.getWayPointsList().size() > 0){ updateOrderRoute(routeList.getWayPointsList()); + updateOrderRouteInfo(routeList.getWayPointsList()); } } @@ -1082,8 +1081,8 @@ public class MogoOCHTaxiModelNew { */ public void updateOrderRoute(List models) { if (null == mCurrentOCHOrder) return; - List points = CoordinateConverterFrom84ForList(mContext,models); - + List points = + CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjList(mContext,models); OCHTaxiServiceManagerNew.getInstance().updateOrderRoute(mContext, mCurrentOCHOrder.orderNo , points, new OCHTaxiServiceCallback() { @Override @@ -1098,24 +1097,105 @@ public class MogoOCHTaxiModelNew { }); } - private List CoordinateConverterFrom84ForList(Context mContext, List mogoLatLngList) { - List points = new ArrayList<>(); - for (MessagePad.Location m : mogoLatLngList) { - LatLng mogoLatLng = CoordinateConverterFrom84(mContext, m); - OrderRouteUpdateReqBean.Result result = new OrderRouteUpdateReqBean.Result(); - result.latitude = mogoLatLng.latitude; - result.longitude = mogoLatLng.longitude; - points.add(result); - } - return points; + /** + * 计算全路径长度,以及实时更新剩余距离,剩余时间,预计时间 + * @param models + */ + public void updateOrderRouteInfo(List models) { + if (null == models || models.size() == 0) return; + if (mCurrentOCHOrder == null) return; + Logger.d(M_TAXI + TAG, "--------计算出sumLength开始---------- "); + + //转换成高德坐标系 + mRoutePoints = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,models); + startDynamicCalculateRouteInfo(); } - private LatLng CoordinateConverterFrom84(Context mContext, MessagePad.Location mogoLatLng) { - CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); - mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); - mCoordinateConverter.coord(new LatLng(mogoLatLng.getLatitude(), mogoLatLng.getLongitude())); - LatLng latLng = mCoordinateConverter.convert(); - return latLng; + public void startDynamicCalculateRouteInfo(){ + Logger.d(M_TAXI + TAG, "--------mCurrentOCHOrder---------- "+mCurrentOCHOrder); + + if (mCurrentOCHOrder != null){//根据orderNo去查询 + queryOrderRouteList(mCurrentOCHOrder.orderNo); + } + if (mRoutePoints.size() == 0) return; + +// mSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(mRoutePoints); +// Logger.d(M_TAXI + TAG, "------------计算出sumLength = "+mSumLength); + //开启实时计算剩余距离,剩余时间,预计时间 + startOrStopCalculateRouteInfo(true); + } + /** + * 实时计算当前剩余里程和时间 + */ + public void dynamicCalculateRouteInfo(){ + Logger.d(M_TAXI + TAG, "------------dynamicCalculateRouteInfoh 本地order = "+OCHTaxiConst.SP_KEY_OCH_TAXI_ORDER); + List lastPoints = CoordinateCalculateRouteUtil.getCurrentPoinByCompare(mRoutePoints,mLongitude,mLatitude); + + double lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + double lastTime = lastSumLength / OCHTaxiConst.TAXI_AVERAGE_SPEED * 0.06 ; //分钟 + Logger.d(M_TAXI + "calculateRouteSumLength", "---lastSumLength: "+lastSumLength+"----lastTime : "+lastTime); + + mCurrentOCHOrder.decreaseTravelDistance(lastSumLength); + if (mOrderStatusCallback != null) { + mOrderStatusCallback.onCurrentOrderDistToEndChanged((long) lastSumLength, (long)Math.ceil(lastTime)); + } + + reportOrderRemain((long)lastSumLength,(long)Math.ceil(lastTime)); + } + + /** + * 查询当前订单的全局路径 (当自动驾驶开启后,订单前往乘客上车点,杀掉应用再次进来时候) + */ + private void queryOrderRouteList(String orderNo) { + if (mCurrentOCHOrder != null){ + OCHTaxiServiceManagerNew.getInstance().queryOrderRoute(mContext, orderNo, new OCHTaxiServiceCallback() { + @Override + public void onSuccess(QueryOrderRouteResp data) { + if (data != null && data.data != null && data.data.point != null){ + mRoutePoints.clear(); + mRoutePoints.addAll(data.data.point); + } + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + } + + /** + * 开始轮询计算剩余里程和时间 + * @param isStart + */ + private void startOrStopCalculateRouteInfo(boolean isStart) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "startOrStopOrderLoop() " + isStart); + if (isStart) { + OCHTaxiModelLoopManager.getInstance().startCalculateRouteInfoLoop(); + } else { + OCHTaxiModelLoopManager.getInstance().stopCalculateRouteInfLoop(); + } + } + + /** + * 上报订单剩余里程和时间 单位:KM, M, 单位:分钟 + * @param lastSumLength + * @param duration + */ + private void reportOrderRemain(long lastSumLength, long duration) {// 米/分钟 + if (mCurrentOCHOrder == null) return; + OCHTaxiServiceManagerNew.getInstance().reportOrderRemain(mContext, mCurrentOCHOrder.orderNo, lastSumLength, duration, new OCHTaxiServiceCallback() { + @Override + public void onSuccess(BaseData data) { + + } + + @Override + public void onFail(int code, String msg) { + + } + }); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/OCHTaxiModelLoopManager.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/OCHTaxiModelLoopManager.java index d8cc82276e..b0bac1f31f 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/OCHTaxiModelLoopManager.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/OCHTaxiModelLoopManager.java @@ -1,6 +1,7 @@ package com.mogo.och.taxi.model; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; +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.constant.OCHTaxiConst; @@ -33,6 +34,7 @@ public class OCHTaxiModelLoopManager { private Disposable mNewBookingOrderDisposable; //新到待抢预约单轮询 private Disposable mGrabResultDisposable; //抢单结果轮询 private Disposable mHeartbeatDisposable; //心跳轮询 + private Disposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 public void startInAndWaitOrdersLoop() { if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) { @@ -117,4 +119,25 @@ public class OCHTaxiModelLoopManager { mHeartbeatDisposable = null; } } + + public void startCalculateRouteInfoLoop() { + if (mCalculateRouteDisposable != null && !mCalculateRouteDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startCalculateRouteInfoLoop()"); + mCalculateRouteDisposable = Observable.interval(OCHTaxiConst.LOOP_DELAY, + OCHTaxiConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> MogoOCHTaxiModelNew.getInstance().dynamicCalculateRouteInfo()); + } + + public void stopCalculateRouteInfLoop() { + if (mCalculateRouteDisposable != null) { + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopCalculateRouteInfLoop()"); + mCalculateRouteDisposable.dispose(); + mCalculateRouteDisposable = null; + } + } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceApiNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceApiNew.java index 2be844639f..b47fd6aadd 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceApiNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceApiNew.java @@ -18,6 +18,8 @@ import com.mogo.och.taxi.bean.OrdersInServiceQueryRespBean; import com.mogo.och.taxi.bean.OrdersListQueryReqBean; import com.mogo.och.taxi.bean.OrdersListQueryRespBean; import com.mogo.och.taxi.bean.OrdersNewBookingQueryRespBean; +import com.mogo.och.taxi.bean.QueryOrderRouteResp; +import com.mogo.och.taxi.bean.UpdateOrderDisAndTimeReqBean; import io.reactivex.Observable; import retrofit2.http.Body; @@ -186,4 +188,21 @@ interface OCHTaxiServiceApiNew { @POST("/autopilot-car-hailing/order/v2/driver/taxi/orderRoute") // @POST("/mock/268/autopilot-car-hailing/order/v2/driver/taxi/orderRoute") Observable updateOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Body OrderRouteUpdateReqBean data); + + /** + * 上报订单剩余里程和剩余时间 + * @param appId + * @param ticket + * @param data + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @POST("/autopilot-car-hailing/order/v2/driver/taxi/reportOrderRemain") + Observable reportOrderRemain(@Header ("appId") String appId, @Header("ticket") String ticket, @Body UpdateOrderDisAndTimeReqBean data); + + + @Headers( {"Content-type:application/json;charset=UTF-8"} ) +// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) + @GET( "/autopilot-car-hailing/order/v2/driver/taxi/orderRoute" ) + Observable queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java index 81b755599a..a36d7576b7 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java @@ -28,6 +28,8 @@ import com.mogo.och.taxi.bean.OrdersInServiceQueryRespBean; import com.mogo.och.taxi.bean.OrdersListQueryReqBean; import com.mogo.och.taxi.bean.OrdersListQueryRespBean; import com.mogo.och.taxi.bean.OrdersNewBookingQueryRespBean; +import com.mogo.och.taxi.bean.QueryOrderRouteResp; +import com.mogo.och.taxi.bean.UpdateOrderDisAndTimeReqBean; import com.mogo.och.taxi.constant.OCHTaxiConst; import java.util.List; @@ -371,6 +373,47 @@ public class OCHTaxiServiceManagerNew { .subscribe(getSubscribeImpl(context,callback,"updateOrderRoute")); } + /** + * 上报剩余里程,时间 + * @param context + * @param orderNo + * @param distance + * @param duration + * @param callback + */ + public void reportOrderRemain(Context context, String orderNo,long distance, long duration + ,OCHTaxiServiceCallback callback){ + if ( mOCHTaxiServiceApi == null ) { + mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() + .create(OCHTaxiServiceApiNew.class, baseUrl); + } + mOCHTaxiServiceApi.reportOrderRemain(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,new UpdateOrderDisAndTimeReqBean(orderNo,distance,duration)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context,callback,"reportOrderRemain")); + } + + /** + * 查询订单全路径 + * @param context + * @param orderNo + * @param callback + */ + public void queryOrderRoute(Context context, String orderNo,OCHTaxiServiceCallback callback) { + if ( mOCHTaxiServiceApi == null ) { + mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() + .create(OCHTaxiServiceApiNew.class, baseUrl); + } + mOCHTaxiServiceApi.queryOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,orderNo) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context,callback,"queryOrderRoute")); + } + private SubscribeImpl getSubscribeImpl( Context context, OCHTaxiServiceCallback callback, String apiName) { return new SubscribeImpl(RequestOptions.create(context)) { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java index 399a72513d..fe4380b8cd 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java @@ -186,6 +186,9 @@ public class OCHTaxiPresenter extends Presenter implements IOCH @Override public void onCurrentOrderStatusChanged(OrderQueryRespBean.Result order) { CallerLogger.INSTANCE.d(M_TAXI + TAG,"order = "+order.toString()); + if (OrderStatusEnum.OnTheWayToEndStation.getCode() == order.orderStatus){ + MogoOCHTaxiModelNew.getInstance().startDynamicCalculateRouteInfo(); + } mView.updateCurrentOrderStatusChanged(order); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java index 47692ff70b..79f2fd5a72 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java @@ -297,22 +297,36 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem } } + /** + * 剩余里程和剩余时间 + * @param meters m + * @param timeInSecond 秒 + */ public void updateDistanceAndTime(long meters, long timeInSecond) { // CallerLogger.INSTANCE.d(M_TAXI + TAG,"meters = "+meters); + String dis = "0"; + String disUnit = "KM"; + + if (meters / 1000 < 1){ + disUnit = "M"; + dis = String.valueOf(Math.round(meters)); + }else { + disUnit = "KM"; + DecimalFormat fnum = new DecimalFormat("##0.00"); + dis = fnum.format((float) meters / 1000); + } + if (mContentModule3 != null && mContentModule3.getVisibility() == View.VISIBLE) { - DecimalFormat fnum = new DecimalFormat("##0.0"); - String dis = fnum.format((float) meters / 1000); - String strHtml2 = "里程 " + "" + dis + "" + " 公里" - + ",剩余 " + "" + (int) timeInSecond / 60 + "" + " 分钟"; + String strHtml2 = "里程 " + "" + dis + "" + " "+disUnit+"" + + ",剩余 " + "" + Math.ceil(timeInSecond / 60) + "" + " 分钟"; mDistanceAndTime3.setText(Html.fromHtml(strHtml2)); mNaviIcon.setVisibility(View.VISIBLE); } else if (mContentModule2 != null && mContentModule2.getVisibility() == View.VISIBLE) { - DecimalFormat fnum = new DecimalFormat("##0.0"); - String dis = fnum.format((float) meters / 1000); - String strHtml2 = "距离 " + "" + dis + "" + " 公里"; -// + ",用时 " + ""+(int)timeInSecond/60+"" + " 分钟"; + String strHtml2 = "里程 " + "" + dis + "" + " "+disUnit+"" + + ",剩余 " + "" + timeInSecond + "" + " 分钟"; mDistanceAndTime2.setText(Html.fromHtml(strHtml2)); } + } public void onCurrentOrderRouteInfoGot(OrderQueryRouteInfoRespBean.Result routeInfo) { 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 972360a8ae..7748962679 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 @@ -550,6 +550,7 @@ public class OCHTaxiFragment extends BaseOchTaxiTabFragment points){ + if (null == points || points.size() == 0) return 0; + + float sumLength = 0; + + //计算全路径总距离 + for (int i = 0;i + 1< points.size();i++){ + double preLat = points.get(i).latitude; + double preLon = points.get(i).longitude; + double laLat = points.get(i+1).latitude; + double laLon = points.get(i+1).longitude; + + float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); + sumLength += length; + } + return sumLength; + } + + public static List coordinateConverterWgsToGcjListCommon(Context mContext, List models) { + //转成MogoLatLng集合 + List list = new ArrayList<>(); + for (MessagePad.Location m : models) { + LatLng mogoLatLng = coordinateConverterWgsToGcj(mContext, m); + list.add(mogoLatLng); + } + return list; + } + + public static LatLng coordinateConverterWgsToGcj(Context mContext, MessagePad.Location mogoLatLng) { + CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); + mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); + mCoordinateConverter.coord(new LatLng(mogoLatLng.getLatitude(), mogoLatLng.getLongitude())); + LatLng latLng = mCoordinateConverter.convert(); + return latLng; + } + + + public static List coordinateConverterWgsToGcjList(Context mContext, List mogoLatLngList) { + List points = new ArrayList<>(); + for (MessagePad.Location m : mogoLatLngList) { + LatLng mogoLatLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(mContext, m); + OrderRouteUpdateReqBean.Result result = new OrderRouteUpdateReqBean.Result(); + result.latitude = mogoLatLng.latitude; + result.longitude = mogoLatLng.longitude; + points.add(result); + } + return points; + } + + /** + * 根据实时定位的坐标确定出已行驶到那个坐标点 + * @param mRoutePoints + * @param realLon + * @param realLat + * @return 返回剩余路径集合 + */ + public static List getCurrentPoinByCompare(List mRoutePoints,double realLon,double realLat) { + // 疑似坐标 先以坐标中间1/2为第一个比对点 + int currentIndex = Math.round(mRoutePoints.size()/2); + LatLng currentLatLng = mRoutePoints.get(currentIndex); + + //差值初始化 + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat + ,currentLatLng.longitude,currentLatLng.latitude);// lon,lat, prelon, prelat + + List latePoints = new ArrayList<>(); + //与选中点左右比较 + if (currentIndex -1 >= 0 && currentIndex+1<= mRoutePoints.size()-1){ + LatLng leftCurrentLatLng = mRoutePoints.get(currentIndex -1); + LatLng rightCurentLatLng = mRoutePoints.get(currentIndex + 1); + float leftDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat + ,leftCurrentLatLng.longitude,leftCurrentLatLng.latitude); + float rightDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat,rightCurentLatLng.longitude,rightCurentLatLng.latitude); + + if (rightDiffDis < leftDiffDis){ //靠近了右半边 + baseDiffDis = rightDiffDis; + for (int i = currentIndex +1; i+1 queryOrderRemaining(@Header("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); + /** + * 查询订单全路径 + * @param appId + * @param ticket + * @param orderNo + * @return + */ @Headers( {"Content-type:application/json;charset=UTF-8"} ) // @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) @GET( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderRoute" ) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java index b8c6eaa831..36430aa39b 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java @@ -84,10 +84,7 @@ public class TaxiPassengerServiceManager { } public void queryOrderRouteList(Context context, String orderNo, TaxiPassengerServiceCallback callback){ - if (mOCHTaxiServiceApi == null) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(TaxiPassengerServiceApi.class, baseUrl); - } + mOCHTaxiServiceApi.queryOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId() ,MoGoAiCloudClientConfig.getInstance().getToken() ,orderNo) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index 9784dd2fc0..d2d13ab1f1 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -155,9 +155,9 @@ public class BaseTaxiPassengerPresenter extends Presenter{ - AIAssist.getInstance(getContext()).speakTTSVoice(getContext().getString(R.string.taxi_p_arrive_end_tts)); - }); +// runOnUIThread(() ->{ +// AIAssist.getInstance(getContext()).speakTTSVoice(getContext().getString(R.string.taxi_p_arrive_end_tts)); +// }); TaxiPassengerNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); mView.showOrHideServingOrderFragment(false); mView.showOrHideArrivedEndLayout(true,order.endSiteAddr); diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java index 2df145c0ac..a6cc3ea100 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java @@ -106,7 +106,6 @@ public class MogoOCHTaxiModelNew { private IOCHTaxiOrderStatusCallback mOrderStatusCallback; //Model->Presenter:订单变更 private List mRoutePoints = new ArrayList<>(); -// private float mSumLength = 0; private double mLongitude, mLatitude; @@ -265,7 +264,7 @@ public class MogoOCHTaxiModelNew { mOCHCarStatus = data.data.serviceStatus == 1 ? 1 : 0; //更新view CallerLogger.INSTANCE.d(M_TAXI + TAG, "changeCarStatus:" + mOCHCarStatus); - startOrStopOrderLoop(mOCHCarStatus == 1); +// startOrStopOrderLoop(mOCHCarStatus == 1); todo 只从一个入口开始订单轮询 String role = ""; if (DriverRoleEnum.DEMO.getCode() == data.data.purpose){ role = OCHTaxiConst.DEMO_USER; @@ -1105,13 +1104,11 @@ public class MogoOCHTaxiModelNew { public void startDynamicCalculateRouteInfo(){ Logger.d(M_TAXI + TAG, "--------mCurrentOCHOrder---------- "+mCurrentOCHOrder); - if (mCurrentOCHOrder != null){//根据orderNo去查询 + if (mCurrentOCHOrder != null && mRoutePoints.size() == 0){//根据orderNo去查询 queryOrderRouteList(mCurrentOCHOrder.orderNo); } if (mRoutePoints.size() == 0) return; -// mSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(mRoutePoints); -// Logger.d(M_TAXI + TAG, "------------计算出sumLength = "+mSumLength); //开启实时计算剩余距离,剩余时间,预计时间 startOrStopCalculateRouteInfo(true); } @@ -1119,12 +1116,12 @@ public class MogoOCHTaxiModelNew { * 实时计算当前剩余里程和时间 */ public void dynamicCalculateRouteInfo(){ - Logger.d(M_TAXI + TAG, "------------dynamicCalculateRouteInfoh 本地order = "+OCHTaxiConst.SP_KEY_OCH_TAXI_ORDER); - List lastPoints = CoordinateCalculateRouteUtil.getCurrentPoinByCompare(mRoutePoints,mLongitude,mLatitude); +// Logger.d(M_TAXI + "dynamicCalculateRouteInfo", "----- startcCalculate ----- "); + List lastPoints = CoordinateCalculateRouteUtil.getRemainPointListByCompare(mRoutePoints,mLongitude,mLatitude); double lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); double lastTime = lastSumLength / OCHTaxiConst.TAXI_AVERAGE_SPEED * 0.06 ; //分钟 - Logger.d(M_TAXI + "calculateRouteSumLength", "---lastSumLength: "+lastSumLength+"----lastTime : "+lastTime); + Logger.d(M_TAXI + "dynamicCalculateRouteInfo", "---lastSumLength: "+lastSumLength+"----lastTime : "+lastTime); mCurrentOCHOrder.decreaseTravelDistance(lastSumLength); if (mOrderStatusCallback != null) { @@ -1160,11 +1157,12 @@ public class MogoOCHTaxiModelNew { * 开始轮询计算剩余里程和时间 * @param isStart */ - private void startOrStopCalculateRouteInfo(boolean isStart) { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "startOrStopOrderLoop() " + isStart); + public void startOrStopCalculateRouteInfo(boolean isStart) { + CallerLogger.INSTANCE.d(M_TAXI + TAG, "startOrStopOrderLoop() " + isStart); if (isStart) { OCHTaxiModelLoopManager.getInstance().startCalculateRouteInfoLoop(); } else { + mRoutePoints.clear(); OCHTaxiModelLoopManager.getInstance().stopCalculateRouteInfLoop(); } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java index 164219f3ea..86ee65d526 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/OCHTaxiServiceManagerNew.java @@ -321,10 +321,7 @@ public class OCHTaxiServiceManagerNew { */ public void reportOrderRemain(Context context, String orderNo,long distance, long duration ,OCHTaxiServiceCallback callback){ - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } + mOCHTaxiServiceApi.reportOrderRemain(MoGoAiCloudClientConfig.getInstance().getServiceAppId() ,MoGoAiCloudClientConfig.getInstance().getToken() ,new UpdateOrderDisAndTimeReqBean(orderNo,distance,duration)) @@ -340,10 +337,6 @@ public class OCHTaxiServiceManagerNew { * @param callback */ public void queryOrderRoute(Context context, String orderNo,OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } mOCHTaxiServiceApi.queryOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId() ,MoGoAiCloudClientConfig.getInstance().getToken() ,orderNo) diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java index fe4380b8cd..e606ec5dd6 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/OCHTaxiPresenter.java @@ -189,6 +189,11 @@ public class OCHTaxiPresenter extends Presenter implements IOCH if (OrderStatusEnum.OnTheWayToEndStation.getCode() == order.orderStatus){ MogoOCHTaxiModelNew.getInstance().startDynamicCalculateRouteInfo(); } + if (OrderStatusEnum.ArriveAtEndStation.getCode() == order.orderStatus || + OrderStatusEnum.Cancel.getCode() == order.orderStatus || + OrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){ + MogoOCHTaxiModelNew.getInstance().startOrStopCalculateRouteInfo(false); + } mView.updateCurrentOrderStatusChanged(order); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java index 79f2fd5a72..5ad00ee09f 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiBeingServerdOrdersFragment.java @@ -148,8 +148,6 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem mNaviIcon.setOnClickListener(this); } - private boolean isSpeakedEndingNotice = false; - /** * 初始化订单信息 */ @@ -305,23 +303,26 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem public void updateDistanceAndTime(long meters, long timeInSecond) { // CallerLogger.INSTANCE.d(M_TAXI + TAG,"meters = "+meters); String dis = "0"; - String disUnit = "KM"; + String disUnit = "公里"; if (meters / 1000 < 1){ - disUnit = "M"; + disUnit = "米"; dis = String.valueOf(Math.round(meters)); }else { - disUnit = "KM"; + disUnit = "公里"; DecimalFormat fnum = new DecimalFormat("##0.00"); dis = fnum.format((float) meters / 1000); } - if (mContentModule3 != null && mContentModule3.getVisibility() == View.VISIBLE) { + if (mContentModule3 != null && mContentModule3.getVisibility() == View.VISIBLE) { //前往上车点 String strHtml2 = "里程 " + "" + dis + "" + " "+disUnit+"" + ",剩余 " + "" + Math.ceil(timeInSecond / 60) + "" + " 分钟"; mDistanceAndTime3.setText(Html.fromHtml(strHtml2)); mNaviIcon.setVisibility(View.VISIBLE); - } else if (mContentModule2 != null && mContentModule2.getVisibility() == View.VISIBLE) { + } else if (mContentModule2 != null && mContentModule2.getVisibility() == View.VISIBLE) { //前往终点 + if (meters <= 200){ + speekVoice200mTipsOnce(); + } String strHtml2 = "里程 " + "" + dis + "" + " "+disUnit+"" + ",剩余 " + "" + timeInSecond + "" + " 分钟"; mDistanceAndTime2.setText(Html.fromHtml(strHtml2)); @@ -329,12 +330,16 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem } + private void speekVoice200mTipsOnce() { + showNotice(getResources().getString(R.string.module_och_taxi_order_arrive_end_200m_tip)); + } + public void onCurrentOrderRouteInfoGot(OrderQueryRouteInfoRespBean.Result routeInfo) { CallerLogger.INSTANCE.d(M_TAXI + TAG, "meters = " + routeInfo.durationToEnd); - DecimalFormat fnum = new DecimalFormat("##0.0"); + DecimalFormat fnum = new DecimalFormat("##0.00"); String dis = fnum.format((float) routeInfo.distanceToEnd / 1000); String strHtml2 = "距离 " + "" + dis + "" + " 公里" - + ",用时 " + "" + (int) routeInfo.durationToEnd / 60 + "" + " 分钟"; + + ",用时 " + "" + Math.ceil(routeInfo.durationToEnd / 60) + "" + " 分钟"; if (mContentModule2 != null && mContentModule2.getVisibility() == View.VISIBLE) { mDistanceAndTime2.setText(Html.fromHtml(strHtml2)); } else if (mContentModule3 != null && mContentModule3.getVisibility() == View.VISIBLE) { @@ -342,13 +347,6 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem } } - public synchronized void SpeakNoticeOnce() { - if (!isSpeakedEndingNotice) { - isSpeakedEndingNotice = true; - showNotice(mActivity.getString(R.string.module_och_taxi_order_complete_1)); - } - } - @Override public void onDestroyView() { super.onDestroyView(); @@ -356,14 +354,14 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem } private void startOrEndService(String step) { - if (step.equals("服务完成")) {//点击了完成服务,结束订单并更新订单信息 + if (step.equals(getResources().getString(R.string.module_och_taxi_order_server_end))) {//点击了完成服务,结束订单并更新订单信息 // isHaveBeingOrder(false); mTaxiFragment.completeOrderService(OrderStatusEnum.JourneyCompleted); - showNotice("车辆已停稳,请携带好随身物品,下车请注意安全"); + showNotice(getResources().getString(R.string.module_och_taxi_order_server_completed_tip)); return; - } else if (step.equals("开始服务")) {//点击服务,开启自动驾驶 + } else if (step.equals(getResources().getString(R.string.module_och_taxi_order_server_start))) {//点击服务,开启自动驾驶 mTaxiFragment.startAutoPilot(); - showNotice("自动驾驶已启动,请系好安全带"); + showNotice(getResources().getString(R.string.module_och_taxi_order_server_start_auto_tip)); } } @@ -372,7 +370,6 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem CallerLogger.INSTANCE.d(M_TAXI + TAG, "status==" + status); mActivity.runOnUiThread(() -> { if (status == OrderStatusEnum.None.getCode() || status == OrderStatusEnum.Cancel.getCode() || status == OrderStatusEnum.JourneyCompleted.getCode()) { - isSpeakedEndingNotice = false; isHaveBeingOrder(false); } else { isHaveBeingOrder(true); @@ -411,7 +408,7 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem break; case ArriveAtEndStation: mOrderCancel.setVisibility(View.GONE); - showNotice(mActivity.getString(R.string.module_och_taxi_order_complete_1)); + showNotice(mActivity.getString(R.string.module_och_taxi_order_auto_arrive_end_tip)); showOrHideNavi(false); setOrRemoveMapMaker(false, OCHTaxiConst.TAXI_START_MAP_MAKER,order.startSitePoint); setOrRemoveMapMaker(false,OCHTaxiConst.TAXI_END_MAP_MAKER,order.endSitePoint); diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/CoordinateCalculateRouteUtil.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/CoordinateCalculateRouteUtil.java index 367b78deb2..7fa812ea21 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/CoordinateCalculateRouteUtil.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/CoordinateCalculateRouteUtil.java @@ -71,12 +71,13 @@ public class CoordinateCalculateRouteUtil { } /** - * 根据实时定位的坐标确定出已行驶到那个坐标点 + * 根据实时定位的坐标确定出已行驶到那个坐标点 todo 有问题 暂不使用 * @param mRoutePoints * @param realLon * @param realLat * @return 返回剩余路径集合 */ + @Deprecated public static List getCurrentPoinByCompare(List mRoutePoints,double realLon,double realLat) { // 疑似坐标 先以坐标中间1/2为第一个比对点 int currentIndex = Math.round(mRoutePoints.size()/2); @@ -104,6 +105,9 @@ public class CoordinateCalculateRouteUtil { if (baseDiffDis >= diff){ baseDiffDis = diff; currentIndex = i; + if (i == mRoutePoints.size()-1){ + latePoints.addAll(mRoutePoints); + } }else { latePoints.addAll(mRoutePoints.subList(currentIndex,mRoutePoints.size()-1)); return latePoints; @@ -117,6 +121,9 @@ public class CoordinateCalculateRouteUtil { if (baseDiffDis >= diff){ baseDiffDis = diff; currentIndex = j; + if (j == 0){ + latePoints.addAll(mRoutePoints); + } }else { latePoints.addAll(mRoutePoints.subList(currentIndex,mRoutePoints.size()-1)); return latePoints; @@ -130,4 +137,37 @@ public class CoordinateCalculateRouteUtil { } return latePoints; } + + /** + * 简单粗暴 直接比较 todo 需要优化 + * @param mRoutePoints + * @param realLon + * @param realLat + * @return + */ + public static List getRemainPointListByCompare(List mRoutePoints,double realLon,double realLat) { + List latePoints = new ArrayList<>(); + int currentIndex = 0; //记录疑似点 + if (mRoutePoints.size() > 0){ + //基础点 + LatLng baseLatLng = mRoutePoints.get(0); + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat + ,baseLatLng.longitude,baseLatLng.latitude);// lon,lat, prelon, prelat + + for (int i= 1; i < mRoutePoints.size(); i++){ + LatLng latLng = mRoutePoints.get(i); + float diff = CoordinateUtils.calculateLineDistance(realLon,realLat + ,latLng.longitude,latLng.latitude); + if (baseDiffDis > diff){ +// Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); + baseDiffDis = diff; + currentIndex = i; + } + } + Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+currentIndex+"-------是最近的点------ "); + latePoints.addAll(mRoutePoints.subList(currentIndex,mRoutePoints.size()-1)); + return latePoints; + } + return latePoints; + } } diff --git a/OCH/mogo-och-taxi/src/main/res/values/strings.xml b/OCH/mogo-och-taxi/src/main/res/values/strings.xml index b6804d5519..3da83cd85f 100644 --- a/OCH/mogo-och-taxi/src/main/res/values/strings.xml +++ b/OCH/mogo-och-taxi/src/main/res/values/strings.xml @@ -18,4 +18,8 @@ 确认 开始服务 服务完成 + 车辆已停稳,请携带好随身物品,下车请注意安全 + 无人驾驶已启动,请您系好安全带 + 即将到达目的地,请拿好随身物品,准备下车 + 已达到目的地,感谢乘坐蘑菇车联无人驾驶车,期待下次相遇 \ No newline at end of file From 1167f6d37c30e6ab26c74440b226fed32b8f3db7 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 30 Mar 2022 17:39:02 +0800 Subject: [PATCH 3/7] =?UTF-8?q?[Taxi=20driver=20V2.6.5]=201=E3=80=81taxi?= =?UTF-8?q?=20=E4=B9=98=E5=AE=A2=E5=B1=8F=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java index 99f3b2d98e..d6c4d590f0 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java @@ -5,8 +5,6 @@ import android.content.Context; import com.amap.api.maps.CoordinateConverter; import com.amap.api.maps.model.LatLng; import com.mogo.cloud.commons.utils.CoordinateUtils; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.och.taxi.bean.OrderRouteUpdateReqBean; import java.util.ArrayList; import java.util.List; From 2506d0ca882464828fbd1e2aeedee5747f7c8584 Mon Sep 17 00:00:00 2001 From: donghongyu Date: Wed, 30 Mar 2022 18:07:31 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E3=80=8CChange=E3=80=8D=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=90=AF=E5=8A=A8=E9=A1=B5=E9=9D=A2=E6=B2=A1=E5=AF=B9?= =?UTF-8?q?=E9=BD=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- .../res/layout/module_main_activity_main.xml | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml index 20a27b4066..a7f8f056e6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml @@ -92,25 +92,26 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - - - - - + + + + + + + \ No newline at end of file From a5a665bd4767934b740cbf5ddd8c388c54bd3de8 Mon Sep 17 00:00:00 2001 From: donghongyu Date: Wed, 30 Mar 2022 18:38:39 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E3=80=8CChange=E3=80=8D=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=90=AF=E5=8A=A8=E9=A1=B5=E9=9D=A2=E6=B2=A1=E5=AF=B9?= =?UTF-8?q?=E9=BD=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- .../src/main/res/layout/module_main_activity_main.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml index a7f8f056e6..32f70b2659 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml @@ -16,8 +16,7 @@ + android:fitsSystemWindows="true"> + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file From 31d1f2f00d332bbea511daf3c5d7dda613ffdcee Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 30 Mar 2022 18:45:29 +0800 Subject: [PATCH 6/7] =?UTF-8?q?[Update]=E6=91=84=E5=83=8F=E5=A4=B4?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=B8=8D=E6=98=BE=E7=A4=BAmock=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mogo/eagle/core/data/camera/ReqLiveCarBean.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/camera/ReqLiveCarBean.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/camera/ReqLiveCarBean.kt index 347c712d93..260b5f2881 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/camera/ReqLiveCarBean.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/camera/ReqLiveCarBean.kt @@ -3,4 +3,4 @@ package com.mogo.eagle.core.data.camera import androidx.annotation.Keep @Keep -data class ReqLiveCarBean(var lon: Double, var lat: Double, var distance: Int = 200) +data class ReqLiveCarBean(var lon: Double, var lat: Double, var distance: Int = 200, var mock: Boolean = true) From 562af30bf10c3d4c69ec0eb4157f76bcdee9b68e Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 30 Mar 2022 18:45:49 +0800 Subject: [PATCH 7/7] =?UTF-8?q?[Update]=E8=B0=83=E6=95=B4=E6=91=84?= =?UTF-8?q?=E5=83=8F=E5=A4=B4icon=E4=BD=8D=E7=BD=AE=E5=92=8C=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/layout/fragment_hmi.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml index e530a19783..890390e686 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml @@ -60,9 +60,9 @@