[Taxi driver V2.6.5] 1、taxi 司机屏全路径计算 2、剩余时间和剩余里程计算 3、taxi 司机屏和乘客屏语音播报调整
This commit is contained in:
@@ -52,6 +52,13 @@ interface TaxiPassengerServiceApi {
|
||||
@GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining")
|
||||
Observable<TaxiPassengerOrderQueryRemainingResp> 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" )
|
||||
|
||||
@@ -84,10 +84,7 @@ public class TaxiPassengerServiceManager {
|
||||
}
|
||||
|
||||
public void queryOrderRouteList(Context context, String orderNo, TaxiPassengerServiceCallback<TaxiPassengerQueryOrderRouteResp> callback){
|
||||
if (mOCHTaxiServiceApi == null) {
|
||||
mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi()
|
||||
.create(TaxiPassengerServiceApi.class, baseUrl);
|
||||
}
|
||||
|
||||
mOCHTaxiServiceApi.queryOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,orderNo)
|
||||
|
||||
@@ -155,9 +155,9 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
}
|
||||
if (TaxiPassengerOrderStatusEnum.ArriveAtEndStation.getCode() == order.orderStatus){
|
||||
TaxiPassengerModel.getInstance().recoverNaviInfo();
|
||||
runOnUIThread(() ->{
|
||||
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);
|
||||
|
||||
@@ -106,7 +106,6 @@ public class MogoOCHTaxiModelNew {
|
||||
private IOCHTaxiOrderStatusCallback mOrderStatusCallback; //Model->Presenter:订单变更
|
||||
|
||||
private List<LatLng> 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<LatLng> lastPoints = CoordinateCalculateRouteUtil.getCurrentPoinByCompare(mRoutePoints,mLongitude,mLatitude);
|
||||
// Logger.d(M_TAXI + "dynamicCalculateRouteInfo", "----- startcCalculate ----- ");
|
||||
List<LatLng> 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,10 +321,7 @@ public class OCHTaxiServiceManagerNew {
|
||||
*/
|
||||
public void reportOrderRemain(Context context, String orderNo,long distance, long duration
|
||||
,OCHTaxiServiceCallback<BaseData> 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<QueryOrderRouteResp> callback) {
|
||||
if ( mOCHTaxiServiceApi == null ) {
|
||||
mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi()
|
||||
.create(OCHTaxiServiceApiNew.class, baseUrl);
|
||||
}
|
||||
mOCHTaxiServiceApi.queryOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,orderNo)
|
||||
|
||||
@@ -189,6 +189,11 @@ public class OCHTaxiPresenter extends Presenter<OCHTaxiFragment> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = "<font color=\"#CAD6FF\">里程 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> "+disUnit+"</font>"
|
||||
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<b><font color=\"#FFFFFF\">" + Math.ceil(timeInSecond / 60) + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>";
|
||||
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 = "<font color=\"#CAD6FF\">里程 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> "+disUnit+"</font>"
|
||||
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<b><font color=\"#FFFFFF\">" + timeInSecond + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>";
|
||||
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 = "<font color=\"#CAD6FF\">距离 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> 公里</font>"
|
||||
+ "<font color=\"#CAD6FF\">,用时 </font>" + "<b><font color=\"#FFFFFF\">" + (int) routeInfo.durationToEnd / 60 + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>";
|
||||
+ "<font color=\"#CAD6FF\">,用时 </font>" + "<b><font color=\"#FFFFFF\">" + Math.ceil(routeInfo.durationToEnd / 60) + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>";
|
||||
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);
|
||||
|
||||
@@ -71,12 +71,13 @@ public class CoordinateCalculateRouteUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据实时定位的坐标确定出已行驶到那个坐标点
|
||||
* 根据实时定位的坐标确定出已行驶到那个坐标点 todo 有问题 暂不使用
|
||||
* @param mRoutePoints
|
||||
* @param realLon
|
||||
* @param realLat
|
||||
* @return 返回剩余路径集合
|
||||
*/
|
||||
@Deprecated
|
||||
public static List<LatLng> getCurrentPoinByCompare(List<LatLng> 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<LatLng> getRemainPointListByCompare(List<LatLng> mRoutePoints,double realLon,double realLat) {
|
||||
List<LatLng> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,4 +18,8 @@
|
||||
<string name="module_och_taxi_order_cancel_commit">确认</string>
|
||||
<string name="module_och_taxi_order_server_start">开始服务</string>
|
||||
<string name="module_och_taxi_order_server_end">服务完成</string>
|
||||
<string name="module_och_taxi_order_server_completed_tip">车辆已停稳,请携带好随身物品,下车请注意安全</string>
|
||||
<string name="module_och_taxi_order_server_start_auto_tip">无人驾驶已启动,请您系好安全带</string>
|
||||
<string name="module_och_taxi_order_arrive_end_200m_tip">即将到达目的地,请拿好随身物品,准备下车</string>
|
||||
<string name="module_och_taxi_order_auto_arrive_end_tip">已达到目的地,感谢乘坐蘑菇车联无人驾驶车,期待下次相遇</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user