From 088be89daf6272d96bb171bb27698ee18849316b Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 30 Mar 2022 16:43:23 +0800 Subject: [PATCH] =?UTF-8?q?[Taxi=20driver=20V2.6.5]=201=E3=80=81taxi=20?= =?UTF-8?q?=E5=8F=B8=E6=9C=BA=E5=B1=8F=E5=85=A8=E8=B7=AF=E5=BE=84=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=202=E3=80=81=E5=89=A9=E4=BD=99=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=92=8C=E5=89=A9=E4=BD=99=E9=87=8C=E7=A8=8B=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=203=E3=80=81taxi=20=E5=8F=B8=E6=9C=BA=E5=B1=8F=E5=92=8C?= =?UTF-8?q?=E4=B9=98=E5=AE=A2=E5=B1=8F=E8=AF=AD=E9=9F=B3=E6=92=AD=E6=8A=A5?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/TaxiPassengerServiceApi.java | 7 ++++ .../network/TaxiPassengerServiceManager.java | 5 +-- .../presenter/BaseTaxiPassengerPresenter.java | 6 +-- .../och/taxi/model/MogoOCHTaxiModelNew.java | 18 ++++---- .../network/OCHTaxiServiceManagerNew.java | 9 +--- .../och/taxi/presenter/OCHTaxiPresenter.java | 5 +++ .../ui/OCHTaxiBeingServerdOrdersFragment.java | 41 +++++++++--------- .../utils/CoordinateCalculateRouteUtil.java | 42 ++++++++++++++++++- .../src/main/res/values/strings.xml | 4 ++ 9 files changed, 89 insertions(+), 48 deletions(-) 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 264cd37876..7e3d423755 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 @@ -52,6 +52,13 @@ interface TaxiPassengerServiceApi { @GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining") Observable 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