diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt index d199f69d5b..ec647b77f8 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt @@ -6,7 +6,8 @@ interface IDistanceListener { /** * @param distance 距离终点坐标的距离 */ - fun distanceCallback(distance: Float) + fun distanceCallback(distance: Float){} + fun stationDistanceCallback(stationDistance:Float){} } interface ITrajectoryListener{ diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt index 88c7f2912e..7b2ef43495 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt @@ -57,8 +57,11 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ @Volatile private var mRoutePoints: MutableList? = ArrayList() + // 0-1 1-2 2-3 各个轨迹点的距离 private var mRoutePointsDistance: MutableList? = ArrayList() + // 所有轨迹点距离的和 private var maxDistanceAllPoint:Double = 0.0 + private val stationDistance: ConcurrentHashMap = ConcurrentHashMap() @Volatile private var lineId:Long? = null @@ -155,14 +158,17 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ this.endStationInfo.stationPoint = null this.startStationInfo.stationPoint = null this.lineId = null + stationDistance.clear() }else{ if(isSameStation(this.startStationInfo.stationPoint,startStationInfo)&& isSameStation(this.endStationInfo.stationPoint,endStationInfo)){ if(this.lineId!=lineId){ resetStation() + stationDistance.clear() } }else{ resetStation() + stationDistance.clear() } this.endStationInfo.stationPoint = endStationInfo this.startStationInfo.stationPoint = startStationInfo @@ -306,6 +312,22 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ preCarLocationIndexInTrajectory = carLocationInfo.first + try { + if (endStationInfo.stationPoint != null + && endStationInfo.isNext!= null + && endStationInfo.index != null + && endStationInfo.distance != null + && startStationInfo.stationPoint != null + && startStationInfo.isNext != null + && startStationInfo.index != null + && startStationInfo.distance != null + ) { + calculateStationDistance() + } + }catch (e:Exception){ + e(M_OCHCOMMON+ TAG,"计算两个站点间的距离") + } + // 距离回调 try { if(distanceListeners.size>0) { @@ -334,6 +356,56 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ } + /** + * 计算站点间距离 + */ + private fun calculateStationDistance() { + var lastSumLength = 0f + val key = getKey() + if (stationDistance[key] !=null) { + return + } + + val stationIndex = endStationInfo.index?:0 + if (startStationInfo.index!! < stationIndex-1) { + // subList 是[) 需要的是[] + val subList = mRoutePoints!!.subList(startStationInfo.index!!, stationIndex + 1) + // 轨迹点所有的距离 + lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(subList) + val stationDistance = endStationInfo.distance ?: 0f + if (endStationInfo.isNext == true) {// isNext = true + lastSumLength -= stationDistance + } else {// isNext = false + lastSumLength += stationDistance + } + if (startStationInfo.isNext==true) {// 是否是下一个 true 下一个 + lastSumLength += startStationInfo.distance!! + } else { + lastSumLength -= startStationInfo.distance!! + } + } else { + val lastPoints = endStationInfo.stationPoint + lastSumLength = CoordinateUtils.calculateLineDistance( + startStationInfo.stationPoint!!.longitude, startStationInfo.stationPoint!!.latitude, + lastPoints!!.longitude, lastPoints.latitude + ) + } + d(M_OCHCOMMON+ TAG,"距离终点:$lastSumLength") + stationDistance[key] = lastSumLength + + if(distanceListeners.size>0) { + distanceListeners.forEach { + //val tag = it.key + val listener = it.value + listener.stationDistanceCallback(lastSumLength) + } + } + } + + private fun getKey(): String { + return "${startStationInfo.stationPoint!!.longitude}${startStationInfo.stationPoint!!.latitude}${endStationInfo.stationPoint!!.longitude}${endStationInfo.stationPoint!!.latitude}" + } + private fun invokeDistance( carLocationInfo: Triple, 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.kt similarity index 57% rename from OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java rename to OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt index f89ebcb8ef..eff80bd5dc 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.kt @@ -1,20 +1,19 @@ -package com.mogo.och.taxi.passenger.callback; +package com.mogo.och.taxi.passenger.callback -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean /** * Created on 2021/9/8 * * Model->Presenter回调:订单相关(进行中/待服务单变更,当前进行单状态变更,新到预约单,抢单,抢单结果状态等等) */ -public interface IOCHTaxiPassengerOrderStatusCallback { - +interface IOCHTaxiPassengerOrderStatusCallback { // 当前进行单状态变更:新到进行中订单、进行中单状态变更 - void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order); + fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?){} // 当前位置距离上车点的距离(米)、预估时间(秒) - void onCurrentOrderDistToEndChanged(long meters, long timeInSecond); + fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long,stationDistance:Int){} // 司机已确认开启自动驾驶环境 - void onDriverHasCheckedPilotCondition(boolean isBoarded); -} + fun onDriverHasCheckedPilotCondition(isBoarded: Boolean){} +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt index c12e9db36b..b42f1d84f8 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt @@ -173,9 +173,8 @@ object TaxiPassengerModel { //监听网络变化,避免启动机器时无网导致无法更新订单信息 private val distanceListener: IDistanceListener = object : IDistanceListener { - override fun distanceCallback(distance: Float) { - // TODO: 计算站点到站点的距离 calculateRouteLineSum() - SharedPrefsMgr.getInstance(mContext!!).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 12) + override fun stationDistanceCallback(stationDistance: Float) { + SharedPrefsMgr.getInstance(mContext!!).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, stationDistance.toInt()) } } private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent -> @@ -221,8 +220,10 @@ object TaxiPassengerModel { override fun onSuccess(data: TaxiPassengerOrderQueryRemainingResp) { if (data.data != null) { e(M_TAXI_P + TAG, "distance = " + data.data.distance + " ,duration = " + data.data.duration) + val stationDistance = SharedPrefsMgr.getInstance(mContext!!) + .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) for (callback in mOrderStatusCallbackMap.values) { - callback.onCurrentOrderDistToEndChanged(data.data.distance, data.data.duration) + callback.onCurrentOrderDistToEndChanged(data.data.distance, data.data.duration,stationDistance) } } } 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 934bc285a6..3c91698d4b 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 @@ -87,7 +87,7 @@ public class BaseTaxiPassengerPresenter extends Presenter0&&alreadyGoneneedChangeStyleNumber) xor (currentPercentage>needChangeStyleNumber)){ + if(currentPercentage>needChangeStyleNumber){ + setDrawable(false) + }else{ + setDrawable(true) + } + } + + if (progress_distance.max != stationDistance) { + progress_distance.max = stationDistance + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + progress_distance.setProgress(alreadyGone,true) + }else{ + progress_distance.progress = alreadyGone + } + } + } init { try { - initView(context) + initView() } catch (e: Exception) { e.printStackTrace() } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt index d44238de96..e4e8a17a26 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt @@ -1,13 +1,22 @@ package com.mogo.och.taxi.passenger.ui.orderinfo import androidx.lifecycle.ViewModel +import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.NumberFormatUtil +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel import kotlin.math.abs +import kotlin.math.ceil -class OrderInfoViewModel: ViewModel(), IMoGoChassisLocationGCJ02Listener { +class OrderInfoViewModel: ViewModel(), IMoGoChassisLocationGCJ02Listener, + IOCHTaxiPassengerOrderStatusCallback { private val TAG = OrderInfoViewModel::class.java.simpleName @@ -16,6 +25,7 @@ class OrderInfoViewModel: ViewModel(), IMoGoChassisLocationGCJ02Listener { init { // 设置起点和终点marker和实时车辆位置 CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this) + TaxiPassengerModel.setOrderStatusCallback(TAG,this) } fun setDistanceCallback(viewCallback:ItineraryViewCallback){ @@ -45,4 +55,34 @@ class OrderInfoViewModel: ViewModel(), IMoGoChassisLocationGCJ02Listener { fun setSpeed(speedValue:String) } + override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?) { + order?.endSiteAddr?.let { + UiThreadHandler.post { + viewCallback?.setEndStation(it) + } + } + } + + override fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long,stationDistance:Int) { + var dis: String? = "0" + var disUnit = "KM" + if (meters > 0) { + if (meters / 1000 < 1) { + disUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_distance_unit_m) + dis = Math.round(meters.toFloat()).toString() + } else { + + dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) + } + } + val time = ceil(timeInSecond / 60f).toInt() + val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt()) + + val surplusTimeUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_surplustime) + UiThreadHandler.post { + viewCallback?.setDistanceInfo( + dis!!,disUnit,time.toString(),surplusTimeUnit,arriveTime,stationDistance-meters.toInt(),stationDistance) + } + } + } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml index 9e18d9d9ff..8dd339fde2 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml @@ -73,6 +73,14 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + 启动中... 自动驾驶启动失败,请与司机确认车辆状态 车辆尚未完成准备,不能启动自动驾驶 + + 距离(KM) + 距离(M) + 剩余(分) + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index edae674246..7533efceae 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -1481,7 +1481,16 @@ public class TaxiModel { } } - private final IDistanceListener distanceListener = this::updateDistance; + private final IDistanceListener distanceListener = new IDistanceListener() { + @Override + public void distanceCallback(float distance) { + updateDistance(distance); + } + + @Override + public void stationDistanceCallback(float stationDistance) { + } + }; private final ITrajectoryListener trajectoryListener = (routeArrivied, routeArriving, location) -> { if (mAutopilotPlanningCallback != null) {