diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/LoopInfo.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/LoopInfo.kt index 9baf1d93c7..9092b0146a 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/LoopInfo.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/LoopInfo.kt @@ -1,3 +1,3 @@ package com.mogo.och.bus.passenger.bean -data class LoopInfo(val interval:Long,val function: () -> Unit) \ No newline at end of file +data class LoopInfo(val interval:Long,val function: () -> Unit,val immediately:Boolean=false) \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IDistanceTimeCallback.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IDistanceTimeCallback.kt index 76c3469487..8703a50e20 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IDistanceTimeCallback.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/callback/IDistanceTimeCallback.kt @@ -2,4 +2,6 @@ package com.mogo.och.bus.passenger.callback interface IDistanceTimeCallback { fun setDistancecAndTime(meters:Long , timeInSecond:Long ) + + fun setOrderTimeCallBack(timeInSecond:Long) } \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt index 7aa686cb37..ac6c34ee37 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt @@ -6,6 +6,7 @@ import android.net.ConnectivityManager import com.mogo.commons.AbsMogoApplication import com.mogo.commons.module.intent.IMogoIntentListener import com.mogo.commons.module.intent.IntentManager +import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.data.BaseData import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLine @@ -22,19 +23,14 @@ import com.mogo.eagle.core.network.utils.GsonUtil import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P -import com.mogo.eagle.core.utilcode.util.CoordinateTransform -import com.mogo.eagle.core.utilcode.util.CoordinateUtils -import com.mogo.eagle.core.utilcode.util.CountDownTimer -import com.mogo.eagle.core.utilcode.util.NetworkUtils -import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.eagle.core.utilcode.util.* import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.LoopInfo import com.mogo.och.bus.passenger.bean.response.* import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback -import com.mogo.och.bus.passenger.callback.IOrderChangeCallback import com.mogo.och.bus.passenger.callback.IDistanceTimeCallback +import com.mogo.och.bus.passenger.callback.IOrderChangeCallback import com.mogo.och.bus.passenger.constant.BusPassengerConst.Companion.Charter_AVERAGE_SPEED import com.mogo.och.bus.passenger.net.BusPassengerModelLoopManager import com.mogo.och.bus.passenger.net.BusPassengerServiceManager @@ -50,8 +46,16 @@ import com.mogo.och.common.module.voice.VoiceManager import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg import system_master.SystemStatusInfo -import java.util.* +import io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import java.util.TreeMap import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.TimeUnit +import kotlin.collections.ArrayList +import kotlin.collections.HashMap /** * Created on 2022/3/31 @@ -59,7 +63,7 @@ import java.util.concurrent.ConcurrentHashMap @SuppressLint("StaticFieldLeak") object CharterPassengerModel { - private const val TAG = "BusPassengerModel" + private const val TAG = "CharterPassengerModel" private const val TAGLOGIN = "BusPassengerModelLogin" private const val TAGORDER = "BusPassengerModelOrder" private const val TAGCARSTATUS = "BusPassengerModelCarStatus" @@ -107,10 +111,10 @@ object CharterPassengerModel { private val endKey = "arrivedLine" private val min5Speak = "min5Speak" - private var countDownTimer:CountDownTimer?=null - private var carTypeChageListener: IOrderChangeCallback?=null + private var subscribeCountDown: Disposable?=null + fun init() { initListeners() queryLoginStatus() @@ -482,7 +486,7 @@ object CharterPassengerModel { private fun startCalibrationLoop() { BusPassengerModelLoopManager.setLoopFunction( TAGCALIBRATION, - LoopInfo(120, ::queryBusinessTime) + LoopInfo(120, ::queryBusinessTime,immediately = true) ) } @@ -503,31 +507,40 @@ object CharterPassengerModel { if (data?.data == null) return if (data.data.currentTime != null && data.data.endTime != null) { val endlast = data.data.endTime - data.data.currentTime - countDownTimer?.cancel() - if(endlast<300*1000){ - return + subscribeCountDown?.let { + if (!it.isDisposed) { + it.dispose() + } } - countDownTimer = object :CountDownTimer(endlast,1000){ - override fun onTick(millisUntilFinished: Long) { - if(millisUntilFinished/1000<=300L){ + val leadTime = endlast / 1000 + subscribeCountDown = + Observable.intervalRange(0L, leadTime, 0, 1, TimeUnit.SECONDS) + .map { aLong -> leadTime - aLong } + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe{millisUntilFinished-> + if (millisUntilFinished <= 300L) { orderInfo?.let { - if (broadcastList.get("${it}$min5Speak")==null||broadcastList.get("${it}$min5Speak")==false) { + if (broadcastList.get("${it}$min5Speak") == null + || broadcastList.get("${it}$min5Speak") == false + ) { //发送 通知 - OCHSocketMessageManager.pushAppOperationalMsgBox(DateTimeUtil.getCurrentTimeStamp(), - AbsMogoApplication.getApp().getString(R.string.m1_end_order_5min),2) + OCHSocketMessageManager.pushAppOperationalMsgBox( + DateTimeUtil.getCurrentTimeStamp(), + AbsMogoApplication.getApp() + .getString(R.string.m1_end_order_5min), 2 + ) VoiceManager.surplus5min() broadcastList["${it}$min5Speak"] = true } } } - CallerLogger.d(M_BUS_P+TAG,"倒计时${millisUntilFinished/1000}") + iDistanceTimeCallback?.setOrderTimeCallBack(millisUntilFinished) + CallerLogger.d( + M_BUS_P + TAG, + "倒计时${millisUntilFinished}" + ) } - - override fun onFinish() { - - } - } - countDownTimer?.start() } } diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt index 22f1ade707..1686044518 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt @@ -25,7 +25,13 @@ object BusPassengerModelLoopManager { fun setLoopFunction(tag: String, function: LoopInfo) { if (tag.isBlank()) return + if(mControllerStatusCallbackMap.contains(tag)){ + return + } mControllerStatusCallbackMap[tag] = function + if(function.immediately){ + function.function.invoke() + } if (mControllerStatusCallbackMap.size > 0) { startLineLoop() } diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt index 19790aa6fb..e4262c5863 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt @@ -63,12 +63,16 @@ class BusPassengerPresenter(view: MainFragment?) : mView?.setSpeed(speedKM.toString()) } } - private fun setDistanceAndTime(distance: String,distanceUnit: String,sumTime:String,arrivedTime:String){ + private fun setDistanceAndTime(distance: String,distanceUnit: String){ UiThreadHandler.post { - mView?.setDistanceAndTime(distance, distanceUnit, sumTime, arrivedTime) + mView?.setDistanceAndTime(distance, distanceUnit) + } + } + private fun setOrderTime(sumTime:String,arrivedTime:String){ + UiThreadHandler.post { + mView?.setOrderTime(sumTime, arrivedTime) } } - override fun onCarLocationChanged(location: MogoLocation?) { location?.let { setSpeed(it.gnssSpeed) @@ -146,13 +150,17 @@ class BusPassengerPresenter(view: MainFragment?) : dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) } } + setDistanceAndTime(dis.toString(),disUnit) + } + + override fun setOrderTimeCallBack(timeInSecond: Long) { val surplusTime = Math.ceil(timeInSecond.toDouble() / 60f).toInt() val beforeTime = Calendar.getInstance() beforeTime.add(Calendar.MINUTE, surplusTime) //到达时间 val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.HH_mm) - setDistanceAndTime(dis.toString(),disUnit,surplusTime.toString(),arriveTime) + setOrderTime(surplusTime.toString(),arriveTime) } companion object{ @@ -208,7 +216,8 @@ class BusPassengerPresenter(view: MainFragment?) : UiThreadHandler.post { mView?.showOpenAndCloseDoor() mView?.cleanEndStation() - mView?.setDistanceAndTime("0", "KM", "--", "--") + setDistanceAndTime("0", "KM") + setOrderTime("--","--") } } } diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/MainFragment.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/MainFragment.kt index dad47d5be1..e7e7f9ebed 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/MainFragment.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/MainFragment.kt @@ -152,11 +152,14 @@ class MainFragment : fun setDistanceAndTime( distance: String, distanceUnit: String, - sumTime: String, - arrivedTime: String ) { tv_distance.text = distance tv_distance_unit.text = "距离(${distanceUnit})" + } + fun setOrderTime( + sumTime: String, + arrivedTime: String + ) { tv_distance_surplus_time.text = sumTime tv_distance_arrive_time.text = arrivedTime }