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 787af473be..fb689f53d3 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 @@ -8,12 +8,15 @@ import android.widget.TextView; import androidx.annotation.NonNull; import com.mogo.cloud.commons.utils.CoordinateUtils; +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.network.SubscribeImpl; import com.mogo.commons.voice.AIAssist; import com.mogo.map.MogoLatLng; import com.mogo.map.location.MogoLocation; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.map.overlay.MogoPolylineOptions; import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.utils.LocationUtils; import com.mogo.och.BaseOchFragment; import com.mogo.och.taxi.IMogoADASAutoPilotStatusChangedListener; import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback; @@ -26,12 +29,21 @@ import com.mogo.och.taxi.R; import com.mogo.och.view.SlidePanelView; import com.mogo.service.adas.IMogoAdasOCHCallback; import com.mogo.service.adas.IMogoAdasRouteCallBack; +import com.mogo.service.adas.entity.AdasOCHData; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; +import com.mogo.utils.network.RequestOptions; +import com.mogo.utils.network.utils.GsonUtil; +import java.util.ArrayList; import java.util.List; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; +import okhttp3.MediaType; +import okhttp3.RequestBody; + public /** * @author congtaowang @@ -441,20 +453,54 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i private OCHTaxiOverlayManager ochTaxiOverlayManager; @Override public void routeResult(List routeList) { - Logger.d("lianglihui","routeResult"); - if (routeList != null && routeList.size() >0){ - Logger.d("lianglihui","routeResult:"+routeList.size()); - //adas回调导航路径 绘制引导线 - if ( ochTaxiOverlayManager == null){ - ochTaxiOverlayManager = new OCHTaxiOverlayManager(this.getContext()); - } - ochTaxiOverlayManager.draw(mogoLocation,routeList); + if (routeList == null ) return; + double distance = calculateTravelDistance(mogoLocation,routeList); + if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { + MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().decreaseTravelDistance( distance ); + updateOrderBaseStatusInfo(); } + Logger.d("lianglihui","routeResult 剩余导航距离:"+distance); +// if (routeList != null && routeList.size() >0){ +// Logger.d("lianglihui","routeResult:"+routeList.size()); +// //adas回调导航路径 绘制引导线 +// if ( ochTaxiOverlayManager == null){ +// ochTaxiOverlayManager = new OCHTaxiOverlayManager(this.getContext()); +// } +// ochTaxiOverlayManager.draw(mogoLocation,routeList); +// } + } + + public double calculateTravelDistance(MogoLocation carLocation,List routeList){ + List mPolylinePointList = new ArrayList<>(); + mPolylinePointList.add(new MogoLatLng(carLocation.getLatitude(), carLocation.getLongitude())); + MogoLatLng routeLatLng; + for (int i = 0 ; i< routeList.size() ; i++) { + routeLatLng =routeList.get(i); + //需要剔除已经行驶过的经纬度,这里需要比对推荐路线集合中的点是否在当前车辆行驶方向前面如果不在则抛弃 + if (LocationUtils.isPointOnCarFront(carLocation, routeLatLng)) { + mPolylinePointList.add(routeLatLng); + } + } + MogoLatLng routeLatLng1,routeLatLng2; + double distance = 0; + for (int i = 0; i < mPolylinePointList.size() ; i ++){ + if (i < mPolylinePointList.size() -1 ){ + routeLatLng1 = mPolylinePointList.get(i); + routeLatLng2 = mPolylinePointList.get(i+1); + distance += CoordinateUtils.calculateLineDistance( + routeLatLng1.getLon(), routeLatLng1.getLat(), + routeLatLng2.getLon(), routeLatLng2.getLat() + ); + } + } + return distance; } @Override public void onArriveAt(AdasOCHData data) { - + Logger.d( TAG, "行程结束"); + MogoApisHandler.getInstance().getApis().getAdasControllerApi().cancelAutopilot(); + AIAssist.getInstance( getContext() ).speakTTSVoice( "即将到达目的地,请您携带好随身物品,安全下车。" ); } @Override diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java index 1439a9389b..cac11a6ba0 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java @@ -129,6 +129,23 @@ public interface IMogoADASController extends IProvider { */ void removeAdasRecognizedDataCallback(IMogoAdasRecognizedDataCallback callback); + /** + * 添加adas自动驾驶路线回调 + * @param callBack + */ + void addAdasAutopilotRouteCallBack(IMogoAdasRouteCallBack callBack); + + /** + * 移除adas自动驾驶路线回调 + * @param callBack + */ + void removeAdasAutopilotRouteCallBack(IMogoAdasRouteCallBack callBack); + + /** + * 查询自动驾驶路线 + */ + void queryAutopilotRoute(); + /** * 自车定位数据 *