[Taxi driver V2.6.5] 1、taxi 司机屏全路径计算 2、剩余时间和剩余里程计算 3、taxi 司机屏和乘客屏语音播报调整

This commit is contained in:
wangmingjun
2022-03-30 16:43:23 +08:00
parent 7f88031cda
commit 088be89daf
9 changed files with 89 additions and 48 deletions

View File

@@ -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" )

View File

@@ -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)

View File

@@ -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);

View File

@@ -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();
}
}

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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>