diff --git a/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt b/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt index 52325b172e..c3b23bc1ff 100644 --- a/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt +++ b/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt @@ -113,6 +113,9 @@ object BusPassengerModel{ false }) + @Volatile + private var isGoingToNextStation = false + fun init(context: Context) { mContext = context.applicationContext initListeners() @@ -227,6 +230,7 @@ object BusPassengerModel{ val station = stations[i] if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && station.isLeaving && i + 1 < stations.size) { //离站 Logger.d(M_BUS_P + TAG, "order = station= leave") + isGoingToNextStation = true mRouteLineInfoCallback!!.updateStationsInfo(stations, i + 1, false) if (mNextStationIndex != i + 1) { mTwoStationsRouts.clear() @@ -241,6 +245,9 @@ object BusPassengerModel{ if (i == stations.size - 1) { cleanStation("updatePassengerRouteInfo最后一个站点") } + + isGoingToNextStation = false + suspendCalculate() Logger.d(M_BUS_P + TAG, "order = station= arrive") @@ -487,15 +494,24 @@ object BusPassengerModel{ override fun onAutopilotStatusResponse(state: Int) { if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotRunning() - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - mTwoStationsRouts.clear() - if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotEnable() - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - mTwoStationsRouts.clear() - if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotDisable() - } else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) { - mTwoStationsRouts.clear() - if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotRunning() + } else { + if (FunctionBuildConfig.isDemoMode && + mNextStationIndex>= 0 && mNextStationIndex <= mStations.size - 1 + && isGoingToNextStation){ + d(M_BUS_P + TAG, "FunctionBuildConfig.isDemoMode is true") + return + } + + if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + mTwoStationsRouts.clear() + if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotEnable() + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { + mTwoStationsRouts.clear() + if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotDisable() + } else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) { + mTwoStationsRouts.clear() + if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotRunning() + } } } override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) { diff --git a/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index 33d497dbf3..e7a7847393 100644 --- a/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/bus/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -453,8 +453,6 @@ public class BusPassengerRouteFragment extends public void AutopilotStatusChanged(int status) { if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) { mAutopilotIv.setImageResource(R.drawable.auto_open); - } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status){ - mAutopilotIv.setImageResource(R.drawable.auto_close); } else { mAutopilotIv.setImageResource(R.drawable.auto_close); } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/OrderInfoResponse.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/OrderInfoResponse.kt index 6e88928e9b..4d93bebfb5 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/OrderInfoResponse.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/OrderInfoResponse.kt @@ -3,6 +3,7 @@ package com.mogo.och.charter.passenger.bean.response import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.data.BaseData import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil +import com.mogo.och.common.module.utils.DateTimeUtil /** * @@ -65,6 +66,20 @@ data class OrderInfoResponse(val data: OrderInfo?) : BaseData() { return null } } + + override fun toString(): String { + return "OrderInfo(orderNo=$orderNo, sn=$sn, productType=${getProductTypeName()}, lineId=$lineId, lineName=$lineName, startSiteId=$startSiteId, startSiteName=$startSiteName, startSiteNameKr=$startSiteNameKr, siteId=$siteId, siteName=$siteName, siteNameKr=$siteNameKr, wgs84Lat=$wgs84Lat, wgs84Lon=$wgs84Lon, startTime=${DateTimeUtil.formatLongToString(startTime?:System.currentTimeMillis(), DateTimeUtil.MM_dd_HH_mm)}, endTime=${DateTimeUtil.formatLongToString(endTime?:System.currentTimeMillis(), DateTimeUtil.MM_dd_HH_mm)}, passengerPhone=$passengerPhone, arriveStatus=$arriveStatus)" + } + + fun getProductTypeName(): String { + return when (productType) { + M1_LOVE -> "爱情号" + M1_FAMILY -> "家庭号" + M1_FRIENDLY -> "朋友号" + else -> "未知" + } + } + } companion object{ val ARRIVING = 1 diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt index 692b642f2b..ab2d27edf2 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt @@ -42,6 +42,7 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.manager.CharterSendTripInfoManager import com.mogo.och.common.module.manager.CharterSendTripInfoManager.LEAVE_STATION import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.common.module.utils.PinYinUtil @@ -393,6 +394,7 @@ object CharterPassengerModel { this.orderInfo = orderData setOrderStatus(OrderStatusEnum.OrdersWithLine) updateAutopilotControlParameters() + OchChainLogManager.writeChainLog(this.orderInfo.toString(),"更改线路成功:${orderData.siteName}") } else { this.orderInfo = orderData } @@ -727,6 +729,7 @@ object CharterPassengerModel { private fun setOrderStatus(orderStatus: OrderStatusEnum) { if (this.orderStatus != orderStatus) { d(M_BUS_P + TAG, "${this.orderInfo?.orderNo}新的状态:$orderStatus") + OchChainLogManager.writeChainLog(this.orderInfo.toString(),"新的状态:$orderStatus") this.orderStatus = orderStatus for (callback in orderStatusChangeListeners.values) { callback.onStatusChange(this.orderStatus) @@ -737,6 +740,7 @@ object CharterPassengerModel { fun setEndOrderStatus() { UiThreadHandler.postDelayed({ setOrderStatus(OrderStatusEnum.NoOrderUse) + OchChainLogManager.writeChainLog(this.orderInfo.toString(),"手动结束订单:$orderStatus") }, 1000) } @@ -933,6 +937,7 @@ object CharterPassengerModel { } if (order != null && lineId != null && siteId != null) { + OchChainLogManager.writeChainLog(this.orderInfo.toString(),"到站成功:${order.siteName}") VoiceManager.arrivedStation( order.siteName!!, order.siteNameKr ?: "", diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt index c7ad6ed594..cfc736dd9e 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt @@ -34,7 +34,7 @@ import com.mogo.och.charter.passenger.ui.overmapview.MakerWithSiteNamewithCheck import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager import com.mogo.och.common.module.manager.StopSideStatusManager -import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback +import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.common.module.wigets.toast.ToastCharterUtils diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt index af30004679..37c887b1dd 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt @@ -6,7 +6,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.wigets.toast.ToastCharterUtils -import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback +import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/OCHAdasAbilityManager.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/OCHAdasAbilityManager.java index bb7491b45d..799c399ca5 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/OCHAdasAbilityManager.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/OCHAdasAbilityManager.java @@ -11,7 +11,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsList import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; -import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason; +import com.zhjt.mogo.adas.data.bean.UnableLaunchReason; import java.util.ArrayList; @@ -25,7 +25,7 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo private static final String TAG = OCHAdasAbilityManager.class.getSimpleName(); private boolean isAutopilotAbility; - private ArrayList unableAutopilotReasons; + private ArrayList unableAutopilotReasons; private String startFailedCode = ""; private String startFailedMessage = ""; @@ -93,7 +93,7 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo } @Override - public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList unableAutopilotReasons) { + public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList unableAutopilotReasons) { this.isAutopilotAbility = isAutopilotAbility; this.unableAutopilotReasons = unableAutopilotReasons; Logger.d(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + (unableAutopilotReasons == null ? null : unableAutopilotReasons.toString())); diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt index 9f514b0204..af3e06b237 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt @@ -3,6 +3,7 @@ package com.mogo.och.common.module.manager.devicemanage import chassis.VehicleStateOuterClass import com.mogo.eagle.core.function.api.autopilot.IMoGoRoboBusJinlvM1StatesListener import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StatesListenerManager +import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus import com.mogo.och.common.module.manager.devicemanage.data.DoorStatus import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/TaxiDoorStateManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/TaxiDoorStateManager.kt new file mode 100644 index 0000000000..daf0ec52eb --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/TaxiDoorStateManager.kt @@ -0,0 +1,129 @@ +package com.mogo.och.common.module.manager.devicemanage + +import chassis.Chassis +import chassis.VehicleStateOuterClass +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager +import com.mogo.eagle.core.function.call.base.CallerBase +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.manager.devicemanage.callback.DoorStateCallback +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState + +object TaxiDoorStateManager : IMoGoChassisDoorStateListener, + CallerBase() { + private val TAG = TaxiDoorStateManager::class.java.simpleName + + @Volatile + private var haveOpenDoor: Boolean? = null + + init { + CallerChassisDoorStateListenerManager.addListener(TAG, this) + } + + override fun doSomeAfterAddListener(tag: String, listener: DoorStateCallback) { + val doorList = CallerChassisDoorStateListenerManager.getDoorList() + if(doorList is MutableList){ + doSomeAfterAddListenerInner(doorList) + doorList.forEach { + onAutopilotSingleDoorState(it.number,it.status) + } + }else{ + doSomeAfterAddListenerInner(mutableListOf()) + } + } + + private fun doSomeAfterAddListenerInner(doorList: MutableList){ + var have = false + doorList.forEach { + if (it.status == 1) {//0关闭 1开着 2未知 + have = true + } + } + haveOpenDoor = have + invokeOpenState(have) + } + + /** + * 主要用来判断是否有门开着 + */ + override fun onAutopilotDoorState(doorList: MutableList) { + var have = false + doorList.forEach { + if (it.status == 1) {//0关闭 1开着 2未知 + have = true + } + } + if (have != haveOpenDoor) { + haveOpenDoor = have + invokeOpenState(have) + } + } + + /** + * 判断单个车门是否开着 + */ + override fun onAutopilotSingleDoorState(num: Chassis.DoorNumber, status: Int) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${num}--${status}") + when (status) { + 0 -> { exchangeEnum(num, DoorState.CLOSE)} + 1 -> {exchangeEnum(num, DoorState.OPEN)} + 2 -> {exchangeEnum(num, DoorState.UNKNOWN)} + else -> {} + } + + } + + private fun exchangeEnum(num: Chassis.DoorNumber, state: DoorState) { + when (num) { + Chassis.DoorNumber.FRONT_LEFT -> { + invokeSingleDoorOpenState(DoorPosition.FRONT_LEFT, state) + } + + Chassis.DoorNumber.FRONT_RIGHT -> { + invokeSingleDoorOpenState(DoorPosition.FRONT_RIGHT, state) + } + + Chassis.DoorNumber.REAR_LEFT -> { + invokeSingleDoorOpenState(DoorPosition.REAR_LEFT, state) + } + + Chassis.DoorNumber.REAR_RIGHT -> { + invokeSingleDoorOpenState(DoorPosition.REAR_RIGHT, state) + } + + Chassis.DoorNumber.MIDDLE -> { + invokeSingleDoorOpenState(DoorPosition.MIDDLE, state) + } + + else -> {} + } + } + + /** + * @param have true 有车门开着 + * false 没有车门开着(可能开着可能未知) + */ + @Synchronized + private fun invokeOpenState(have: Boolean) { + M_LISTENERS.forEach { + val listener = it.value + listener.hasOpenDoor(have) + } + } + + /** + * @param doorPosition 车门位置 + * @param doorState 车门状态 + */ + @Synchronized + private fun invokeSingleDoorOpenState(doorPosition: DoorPosition,doorState: DoorState) { + M_LISTENERS.forEach { + val listener = it.value + listener.doorStateChangeCallback(doorPosition,doorState) + } + } + + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/DoorStateCallback.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/DoorStateCallback.kt new file mode 100644 index 0000000000..37886350be --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/DoorStateCallback.kt @@ -0,0 +1,19 @@ +package com.mogo.och.common.module.manager.devicemanage.callback + +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState + +interface DoorStateCallback { + + /** + * @param have true 有车门开着 + * false 没有车门开着(可能开着可能未知) + */ + fun hasOpenDoor(have:Boolean){} + + /** + * @param position 车门位置 + * @param state 当前车门状态 + */ + fun doorStateChangeCallback(position: DoorPosition,state: DoorState){} +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorCallback.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/LightAirconditionDoorCallback.kt similarity index 92% rename from OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorCallback.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/LightAirconditionDoorCallback.kt index 69e1292ef4..a9a5f7f607 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorCallback.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/LightAirconditionDoorCallback.kt @@ -1,4 +1,4 @@ -package com.mogo.och.common.module.manager.devicemanage +package com.mogo.och.common.module.manager.devicemanage.callback import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt index 370f8a5dac..7f6121e562 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt @@ -1,3 +1,12 @@ package com.mogo.och.common.module.manager.devicemanage.data -data class DoorStatus(var isOpen: Boolean) \ No newline at end of file +data class DoorStatus(var isOpen: Boolean) + + +enum class DoorPosition { + FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE +} + +enum class DoorState { + OPEN,CLOSE,UNKNOWN +} \ No newline at end of file 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 b2fcc24349..0b03eaafec 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 @@ -549,13 +549,13 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ } } - @ChainLog( - linkChainLog = ChainConstant.CHAIN_TYPE_OCH, - linkCode = ChainConstant.CHAIN_SOURCE_OCH, - nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE, - paramIndexes = [0,1] - ) - fun writeLog(carLocationInfo: String, location: String) { +// @ChainLog( +// linkChainLog = ChainConstant.CHAIN_TYPE_OCH, +// linkCode = ChainConstant.CHAIN_SOURCE_OCH, +// nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE, +// paramIndexes = [0,1] +// ) + private fun writeLog(carLocationInfo: String, location: String) { d(M_OCHCOMMON+ TAG,carLocationInfo) d(M_OCHCOMMON+ TAG,location) } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt new file mode 100644 index 0000000000..659b546924 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt @@ -0,0 +1,44 @@ +package com.mogo.och.common.module.manager.orderlogmanager + +import android.text.TextUtils +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.debug.DebugConfig +import com.mogo.commons.utils.MogoAnalyticUtils +import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.data.deva.chain.ChainConstant +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.DateTimeUtils +import com.zhjt.service.chain.ChainLog + +object OchChainLogManager { + + private val TAG = OchChainLogManager::class.java.simpleName + + const val EVENT_KEY_INFE_WITH_CHANGE = "event_key_och_common_info_and_changeinfo" + + /** + * @param Info 订单详细信息 + * @param changeInfo 变化信息 + */ + @ChainLog( + linkChainLog = ChainConstant.CHAIN_TYPE_OCH, + linkCode = ChainConstant.CHAIN_SOURCE_OCH, + nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE, + paramIndexes = [0,1] + ) + fun writeChainLog(Info: String, changeInfo: String) { + d(SceneConstant.M_OCHCOMMON + TAG, Info) + d(SceneConstant.M_OCHCOMMON + TAG, changeInfo) + val plateNum = AppConfigInfo.plateNumber + val params = HashMap() + params["sn"] = MoGoAiCloudClientConfig.getInstance().sn + params["env"] = DebugConfig.getNetMode() + params["plate_number"] = if (TextUtils.isEmpty(plateNum)) "" else plateNum + params["time"] = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd_HH_mm_ss) + params["info"] = Info + params["changeInfo"] = changeInfo + MogoAnalyticUtils.track(EVENT_KEY_INFE_WITH_CHANGE, params) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OrderChainLogManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OrderChainLogManager.kt new file mode 100644 index 0000000000..92ca20a6ef --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OrderChainLogManager.kt @@ -0,0 +1,27 @@ +package com.mogo.och.common.module.manager.orderlogmanager + +import com.mogo.eagle.core.data.deva.chain.ChainConstant +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.zhjt.service.chain.ChainLog + +object OrderChainLogManager { + + private val TAG = OrderChainLogManager::class.java.simpleName + + /** + * @param orderInfo 订单详细信息 + * @param changeInfo 变化信息 + */ + @ChainLog( + linkChainLog = ChainConstant.CHAIN_TYPE_OCH, + linkCode = ChainConstant.CHAIN_SOURCE_OCH, + nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE, + paramIndexes = [0,1] + ) + fun writeChainLog(orderInfo: String, changeInfo: String) { + d(SceneConstant.M_OCHCOMMON + TAG, orderInfo) + d(SceneConstant.M_OCHCOMMON + TAG, changeInfo) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FlowBus.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FlowBus.kt new file mode 100644 index 0000000000..7bdc1dcc2a --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FlowBus.kt @@ -0,0 +1,98 @@ +package com.mogo.och.common.module.utils + +/** + * @author aibingbing + * @date: 2023/9/13 + * @desc Flow Bus + */ +import android.util.Log +import androidx.lifecycle.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.BufferOverflow +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.launch + +/** + * FlowBus消息总线 + */ +object FlowBus { + private const val TAG = "FlowBus" + private val busMap = mutableMapOf>() + private val busStickMap = mutableMapOf>() + + @Synchronized + fun with(key: String): EventBus { + var eventBus = busMap[key] + if (eventBus == null) { + eventBus = EventBus(key) + busMap[key] = eventBus + } + return eventBus as EventBus + } + + @Synchronized + fun withStick(key: String): StickEventBus { + var eventBus = busStickMap[key] + if (eventBus == null) { + eventBus = StickEventBus(key) + busStickMap[key] = eventBus + } + return eventBus as StickEventBus + } + + //真正实现类 + open class EventBus(private val key: String) : LifecycleObserver { + + //私有对象用于发送消息 + private val _events: MutableSharedFlow by lazy { + obtainEvent() + } + + //暴露的公有对象用于接收消息 + private val events = _events.asSharedFlow() + + open fun obtainEvent(): MutableSharedFlow = + MutableSharedFlow(0, 1, BufferOverflow.DROP_OLDEST) + + //主线程接收数据 + fun register(lifecycleOwner: LifecycleOwner, action: (t: T) -> Unit) { + lifecycleOwner.lifecycle.addObserver(this) + lifecycleOwner.lifecycleScope.launch { + events.collect { + try { + action(it) + } catch (e: Exception) { + e.printStackTrace() + Log.e(TAG, "FlowBus - Error:$e") + } + } + } + } + + //协程中发送数据 + suspend fun post(event: T) { + _events.emit(event) + } + + //主线程发送数据 + fun post(scope: CoroutineScope, event: T) { + scope.launch { + _events.emit(event) + } + } + + //自动销毁 + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + fun onDestroy() { + Log.w(TAG, "FlowBus - 自动onDestroy") + val subscriptCount = _events.subscriptionCount.value + if (subscriptCount <= 0) + busMap.remove(key) + } + } + + class StickEventBus(key: String) : EventBus(key) { + override fun obtainEvent(): MutableSharedFlow = + MutableSharedFlow(1, 1, BufferOverflow.DROP_OLDEST) + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt index e60bb084d5..a68c11dca2 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt @@ -121,6 +121,10 @@ class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFir mShouldRun = false } + fun isPlaying():Boolean{ + return mShouldRun + } + /** * 设置停止播放监听 * @param listener 设置监听 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt index 8d41c08fec..f0216e8b3b 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt @@ -36,12 +36,11 @@ object RxUtils { } } - fun isDisposed(disposable: Disposable?):Boolean{ - if(disposable!=null){ - return true + fun isNotDisposed(disposable: Disposable?):Boolean{ + if(disposable==null){ + return false } - - return false + return !disposable.isDisposed } // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/CountDownTimerExt.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/CountDownTimerExt.kt new file mode 100644 index 0000000000..a9ae2176c5 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/CountDownTimerExt.kt @@ -0,0 +1,148 @@ +package com.mogo.och.common.module.wigets + +import android.os.CountDownTimer +import android.util.Log + +/** + * @author: wangmingjun + * @date: 2023/9/18 + * 支持pause的倒计时, 由CountDownTimer实现的, + * 注意CountdownTimer的源码,start(),pause(),cancel()方法都是用message和handler实现的 + * 如果是在子线程中执行,要加调用Looper.prepare()及Looper.loop() + * 或者是使用 runOnMainThread 使其在主线程中执行 + **/ +abstract class CountDownTimerExt( + private var millisInFuture: Long, + /** + * 间隔 + */ + private var mInterval: Long +) { + /** + * 倒计时实现类 + */ + private var countDownTimer: CountDownTimer? = null + private var isTimerPaused = true + var remainingTime: Long + + /** + * @param millisInFutureIn 总时长 + * @param interval onTick间隔 + */ + init { + remainingTime = millisInFuture + } + + fun start() { + startIt(remainingTime, mInterval) + } + + fun start(millisInFutureIn: Long, remainingTimeIn: Long, interval: Long) { + millisInFuture = millisInFutureIn + remainingTime = remainingTimeIn + mInterval = interval + start() + } + + @Synchronized + fun startIt(millisInFutureIn: Long, interval: Long) { + remainingTime = millisInFutureIn + mInterval = interval + if (millisInFuture > 0L && interval > 0L) { + if (!isTimerPaused) { + // 有运行中的先stop + stop() + } + if (isTimerPaused) { + // 有暂停或未运行的,创建CountDownTimer实现, 确保运行在主线程 + countDownTimer = object : CountDownTimer(remainingTime, mInterval) { + override fun onFinish() { + onTimerFinish() + stop() + } + + override fun onTick(millisUntilFinished: Long) { + // 这里会记录剩余的时长保存到remainingTime, 方便暂停后能再恢复 + remainingTime = millisUntilFinished + onTimerTick(millisUntilFinished) + } + } + try { + countDownTimer?.start() + } catch (e: Exception) { + e.printStackTrace() + } + isTimerPaused = false + } else { + Log.d(TAG, "ignore start") + } + } else { + Log.d(TAG, "invalid parameter") + } + } + + /** + * 停止 + */ + fun stop() { + try { + countDownTimer?.cancel() + } catch (e: Exception) { + e.printStackTrace() + } + isTimerPaused = true + remainingTime = millisInFuture + } + + /** + * 暂停 + */ + fun pause() { + if (!isTimerPaused) { + try { + countDownTimer?.cancel() + } catch (e: Exception) { + e.printStackTrace() + } + isTimerPaused = true + onTimerPause() + } + } + + /** + * 恢复 + */ + fun resume() { + if (!isRunning) { + // 通过remainingTime得到剩余的时长 + startIt(remainingTime, mInterval) + onTimerResume(remainingTime) + } + } + + private val isRunning: Boolean + /** + * 运行中 + * @return + */ + get() = !isTimerPaused + + /** + * 每次触发倒计时回调 + * @param value + */ + abstract fun onTimerTick(value: Long) + + /** + * 倒计时完成回调 + */ + abstract fun onTimerFinish() + + abstract fun onTimerPause() + + abstract fun onTimerResume(remainingTime: Long) + + companion object { + private const val TAG = "CountDownTimerExt" + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/StartAutopilotAnimationView.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/StartAutopilotAnimationView.kt index 0325441080..4a9ba7dc8c 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/StartAutopilotAnimationView.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/StartAutopilotAnimationView.kt @@ -32,10 +32,13 @@ class StartAutopilotAnimationView @JvmOverloads constructor( private const val TAG = "StartAutopilotAnimationView" } - private var startTimer: CountDownTimer? = null + private var startTimer: CountDownTimerExt? = null private val mContext: Context + private var mTimerListener: AnimationViewTimerListener? = null private val closeWarningTask: Runnable = Runnable { + //开始倒计时 + countDownTimer() showWarning(DirectionEnum.ALERT_WARNING_NON) } @@ -58,17 +61,36 @@ class StartAutopilotAnimationView @JvmOverloads constructor( super.onAttachedToWindow() } - fun show(direction: DirectionEnum, time: Long) { + fun show(direction: DirectionEnum, time: Long,listener: AnimationViewTimerListener) { + mTimerListener = listener + //开始倒计时 + countDownTimer() showWarning(direction, time) } + fun pause(){ + pauseWarning() + } + + private fun pauseWarning() { + startTimer?.pause() + } + + fun resume(){ + resumeWarning() + } + + private fun resumeWarning() { + startTimer?.resume() + } + fun dismiss(direction: DirectionEnum) { dismissWarning(direction) cancelCountdown() } fun cancelCountdown(){ //防止内存泄漏 - startTimer?.cancel() + startTimer?.stop() startTimer = null } @@ -78,8 +100,6 @@ class StartAutopilotAnimationView @JvmOverloads constructor( * @see WarningDirectionEnum */ private fun showWarning(direction: DirectionEnum, time: Long = ALL_CLOSE_TIMER) { - //开始倒计时 - countDownTimer() // 如果传入的不是关闭显示,则设置倒计时,定时关闭红框警示 if (oldDirection.get() == direction) { @@ -131,6 +151,26 @@ class StartAutopilotAnimationView @JvmOverloads constructor( } } + private fun pauseWarning(direction: DirectionEnum) { + if (direction == DirectionEnum.ALERT_WARNING_NON) { + return + } + removeCallbacks(closeWarningTask) + post { + when (direction) { + DirectionEnum.ALERT_WARNING_TOP -> { + startAutopilotTipImg.visibility = View.VISIBLE + startAutopilotTip.visibility = View.VISIBLE + } + else -> { + CallerLogger.d("$M_HMI$TAG", "Not Support Direction") + } + } + clearAnimation() + this.oldDirection.set(null) + } + } + override fun onDetachedFromWindow() { super.onDetachedFromWindow() } @@ -148,21 +188,37 @@ class StartAutopilotAnimationView @JvmOverloads constructor( startAutopilotTip.visibility = VISIBLE - startTimer = object : CountDownTimer(ALL_CLOSE_TIMER, 1000L) {// 5倒计时后开启自驾 + startTimer = object : CountDownTimerExt(ALL_CLOSE_TIMER, 1000L) {// 5倒计时后开启自驾 - @SuppressLint("SetTextI18n") - override fun onTick(millisUntilFinished: Long) { + override fun onTimerTick(value: Long) { // 倒计时 UiThreadHandler.post { - startAutopilotTip.text = "${(millisUntilFinished/1000).toInt()} 车辆即将自动开启自动驾驶" + startAutopilotTip.text = "${(value/1000).toInt()} 车辆即将自动开启自动驾驶" } playDI() } - override fun onFinish() { + override fun onTimerFinish() { //倒计时结束了... UiThreadHandler.post { startAutopilotTip.text = "车辆正在自动开启自动驾驶" + dismiss(DirectionEnum.ALERT_WARNING_TOP) + } + } + + override fun onTimerPause() { + //倒计时暂停 + UiThreadHandler.post { + pauseWarning(DirectionEnum.ALERT_WARNING_TOP) + mTimerListener?.onTimerPause() + } + } + + override fun onTimerResume(remainingTime: Long) { + //倒计时继续对动画UI处理 + UiThreadHandler.post { + showWarning(DirectionEnum.ALERT_WARNING_TOP, remainingTime) + mTimerListener?.onTimerResume(remainingTime) } } } @@ -170,4 +226,9 @@ class StartAutopilotAnimationView @JvmOverloads constructor( startTimer?.start() } + interface AnimationViewTimerListener{ + fun onTimerResume(remainingTime: Long) + + fun onTimerPause() + } } \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 518254c5a6..44758ad03c 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -119,6 +119,8 @@ public class BusPassengerModel { private int mPreRouteIndex = 0; private int mWipePreIndex = 0; + private volatile boolean isGoingToNextStation = false; + private static final int MSG_QUERY_BUS_P_STATION = 1001; private final Handler handler = new Handler(new Handler.Callback() { @Override @@ -291,6 +293,8 @@ public class BusPassengerModel { for (int i = 0; i< stations.size(); i++){ BusStationBean station = stations.get(i); if (station.getDrivingStatus() == STATION_STATUS_STOPPED && station.isLeaving() && i+1 < stations.size()){ + Logger.d(M_BUS_P + TAG, "order = station= leave"); + isGoingToNextStation = true; mRouteLineInfoCallback.updateStationsInfo(stations,i+1,false); if(mNextStationIndex != i+1){ mTwoStationsRouts.clear(); @@ -302,6 +306,9 @@ public class BusPassengerModel { if (i == 0){ startOrStopRouteAndWipe(false); } + + isGoingToNextStation = false; + Logger.d(M_BUS_P + TAG, "order = station= arrive"); mPreRouteIndex = 0; startOrStopCalculateRouteInfo(false); mRouteLineInfoCallback.updateStationsInfo(stations,i,true); @@ -452,8 +459,6 @@ public class BusPassengerModel { } }; - private volatile int mPreAutoStatus = -1; - private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ @Override public void onSystemStatus(@NonNull SsmInfo.SsmStatusInf statusInf) { @@ -492,27 +497,29 @@ public class BusPassengerModel { int state = autopilotStatusInfo.getState(); if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { //2022.7.20 自动驾驶更换成带档位的 - if(state != mPreAutoStatus && null != routesResult){ + if(null != routesResult){ CallerAutoPilotControlManager.INSTANCE.getGlobalPath(); } if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - if(state != mPreAutoStatus){ - mTwoStationsRouts.clear(); + } else{ + if (FunctionBuildConfig.isDemoMode && + mNextStationIndex>= 0 && mNextStationIndex <= mStations.size() - 1 + && isGoingToNextStation){ + Logger.d(M_BUS_P + TAG, "FunctionBuildConfig.isDemoMode is true"); + return; } - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - if(state != mPreAutoStatus){ + + if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { mTwoStationsRouts.clear(); - } - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); - }else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){ - if(state != mPreAutoStatus){ + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { mTwoStationsRouts.clear(); + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); + }else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){ + mTwoStationsRouts.clear(); + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); } - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); } - mPreAutoStatus = state; } @Override diff --git a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index 91e2192546..e9ec5996d3 100644 --- a/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/shuttle/passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -389,8 +389,6 @@ public class BusPassengerRouteFragment extends public void AutopilotStatusChanged(int status) { if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) { mAutopilotIv.setImageResource(R.drawable.auto_open); - } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status){ - mAutopilotIv.setImageResource(R.drawable.auto_close); } else { mAutopilotIv.setImageResource(R.drawable.auto_close); } diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt index 92fc78aafb..35fa6ba5c5 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt @@ -3,7 +3,7 @@ package com.mogo.och.sweepercloud.callback import chassis.ChassisStatesOuterClass import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean import com.mogo.och.sweepercloud.database.bean.WeltDataBean -import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask +import com.zhjt.mogo.adas.data.AiCloudTask import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable.IsBootableResp import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon @@ -20,7 +20,7 @@ interface ISweeperCloudTaskCallback { /** * 接取云端任务/正在执行中任务信息回调 */ - fun onSweeperCloudTask(messageType: SweeperCloudTask.MessageType,taskInfo: SweeperTask.TaskInfo?) + fun onSweeperCloudTask(messageType: AiCloudTask.MessageType, taskInfo: SweeperTask.TaskInfo?) /** * 云端下发子任务请求pad确认 @@ -40,7 +40,7 @@ interface ISweeperCloudTaskCallback { /** * 挂起/恢复 */ - fun onSweeperCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType,taskId:String,subTaskId:String,code:Code) + fun onSweeperCloudTaskSuspendResume(messageType: AiCloudTask.MessageType,taskId:String,subTaskId:String,code:Code) /** * pad请求云端进入自驾 diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java index 8138e618df..2b749ff5ed 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java @@ -39,10 +39,11 @@ import com.mogo.och.sweepercloud.constant.SweeperConst; import com.mogo.och.sweepercloud.database.MyDataBase; import com.mogo.och.sweepercloud.database.bean.WeltDataBean; import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils; -import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask; +import com.zhjt.mogo.adas.data.AiCloudTask; import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable; import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask; import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume; import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume; import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus; @@ -183,7 +184,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM }); } - public void setControllerStatusCallback(ISweeperControllerStatusCallback callback) { this.mControllerStatusCallback = callback; } @@ -217,7 +217,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } } } - }; public void setSubtask(String subTaskId, SweeperTask.TaskModel subTaskType, int currentLineId) { @@ -257,8 +256,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM return this.mAutopilotState; } - public static List coordinateConverterWgsToGcjList(Context mContext, - List mogoLatLngList) { + public static List coordinateConverterWgsToGcjList( + Context mContext, + List mogoLatLngList) { List points = new ArrayList<>(); for (MessagePad.Location m : mogoLatLngList) { LatLng mogoLatLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(mContext, m); @@ -305,7 +305,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } if (mSubTaskType == SweeperTask.TaskModel.MANUAL) {//收集人工驾驶子任务坐标点 addCoordinates(gnssInfo); - return; } } }; @@ -333,7 +332,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTask(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTask(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTask.TaskInfo taskInfo) { CallerLogger.d(M_SWEEPER + TAG, @@ -345,7 +344,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskConfirm(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskConfirm(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskConfirm.TaskConfirm taskConfirm) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + @@ -357,7 +356,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskStatus(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStatus.TaskStatusPush taskStatusPush) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudTaskStatus:" + printMessage(taskStatusPush)); @@ -368,7 +367,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskStop(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskStop(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStop.StopTaskReq stopTaskReq) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudTaskStop:" + printMessage(stopTaskReq)); @@ -379,7 +378,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudTaskSuspendResume(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudTaskSuspendResume:" + printMessage(suspendResumeTaskResp)); @@ -391,7 +390,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudBootable(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudBootable(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBootable.IsBootableResp isBootableResp) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudBootable:" + printMessage(isBootableResp)); @@ -402,13 +401,24 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } @Override - public void onSweeperFutianCloudBigTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, + public void onSweeperFutianCloudBigTaskStatus(@NonNull AiCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) { CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + "onSweeperFutianCloudBigTaskStatus:" + printMessage(bigTaskStatusPush)); if (mSweeperTaskCallback != null && bigTaskStatusPush != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); - mSweeperTaskCallback.onSweeperCloudBigTaskStatus(bigTaskStatusPush.getTaskId(), bigTaskStatusPush.getTaskStatus()); + mSweeperTaskCallback.onSweeperCloudBigTaskStatus(bigTaskStatusPush.getTaskId(), bigTaskStatusPush.getTaskStatus(), bigTaskStatusPush.getIsPop()); + } + } + + @Override + public void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, + @Nullable SweeperTaskCloudSuspendResume.BigTaskActionPush bigTaskActionPush) { + CallerLogger.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + + "onSweeperFutianCloudTaskCloudSuspendResume:" + printMessage(bigTaskActionPush)); + if (mSweeperTaskCallback != null && bigTaskActionPush != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudBigTaskSuspendResume(bigTaskActionPush.getTaskId(), bigTaskActionPush.getAction(), bigTaskActionPush.getIsPop()); } } @@ -430,24 +440,25 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianTaskIndexData(@NonNull RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) { - if (roboSweeperTaskIndex == null) { - return; - } - - long current = System.currentTimeMillis(); - if (current - mWeltDataCurrentTimeMillis <= WELT_DATA_INTERVAL_MILLIS) { - return; - } - mWeltDataCurrentTimeMillis = current; - - //没有任务数据时,不处理贴边 - if (!isHasTaskInfo) { - return; - } - - CallerLogger.d(M_SWEEPER + TAG, - "mSubTaskType:" + mSubTaskType + "+ onSweeperFutianTaskIndexData:" + printMessage(roboSweeperTaskIndex)); - handleWeltData(roboSweeperTaskIndex); +// 20230728 因小地图不展示了,贴边数据先不处理了,浪费资源 +// if (roboSweeperTaskIndex == null) { +// return; +// } +// +// long current = System.currentTimeMillis(); +// if (current - mWeltDataCurrentTimeMillis <= WELT_DATA_INTERVAL_MILLIS) { +// return; +// } +// mWeltDataCurrentTimeMillis = current; +// +// //没有任务数据时,不处理贴边 +// if (!isHasTaskInfo) { +// return; +// } +// +// CallerLogger.INSTANCE.d(M_SWEEPER + TAG, +// "mSubTaskType:" + mSubTaskType + "+ onSweeperFutianTaskIndexData:" + printMessage(roboSweeperTaskIndex)); +// handleWeltData(roboSweeperTaskIndex); } /** @@ -494,7 +505,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM } } - public static String format(double value) { + private static String format(double value) { BigDecimal bd = new BigDecimal(value); bd = bd.setScale(2, RoundingMode.HALF_UP); return bd.toString(); @@ -508,8 +519,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setSn(getDriverSn()); String reqNo = SweeperCloudTaskUtils.getRequestId(); SweeperTask.GetTaskReq getTaskReq = builder.build(); + CallerLogger.d(M_SWEEPER + TAG, - "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber()); + "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendGetTaskReq.getNumber()); getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq); } @@ -522,10 +534,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setTaskId(taskId); builder.setCode(code); SweeperTask.StartTaskResp startTaskResp = builder.build(); - String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber()); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTask.getNumber()); + getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp); CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTask.getNumber()); + "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTask.getNumber()); } /** @@ -538,9 +551,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setSubTaskId(subTaskId); builder.setCode(code); SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build(); - String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); + "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp); } @@ -556,9 +569,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setTaskId(taskId); builder.setCode(code); SweeperTaskStop.StopTaskResp stopTaskResp = builder.build(); - String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber()); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskStop.getNumber()); + CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber()); + "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskStop.getNumber()); getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp); } @@ -577,13 +591,31 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setLineId(lineId); SweeperBootable.IsBootable isBootable = builder.build(); String reqNo = SweeperCloudTaskUtils.getRequestId(); + CallerLogger.d(M_SWEEPER + TAG, - "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendBootable.getNumber()); + "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.PadSendBootable.getNumber()); getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable); - // TODO: 2023/5/16 //SweeperCloudTaskUtils.mockSendCloudBootable(); } + /** + * 大任务暂停/恢复 接收到指令到 回复 + * @param taskId + * @param code + */ + public void sendSweeperSuspendResumeTaskResp(String taskId, SweeperTaskCloudSuspendResume.Code code) { + SweeperTaskCloudSuspendResume.BigTaskActionResp.Builder builder = SweeperTaskCloudSuspendResume.BigTaskActionResp.newBuilder(); + builder.setSn(getDriverSn()); + builder.setTaskId(taskId); + builder.setCode(code); + SweeperTaskCloudSuspendResume.BigTaskActionResp resp = builder.build(); + String reqNo = msgTypeAndReqNo.get(AiCloudTask.MessageType.CloudPushTaskSuspendResume.getNumber()); + + CallerLogger.d(M_SWEEPER + TAG, + "sendSweeperSuspendResumeTaskResp" + printMessage(resp) + " reqNo:" + reqNo + " messageType:" + AiCloudTask.MessageType.CloudPushTaskSuspendResume); + getAutoPilotControlManager().sendSweeperCloudSuspendResumeTaskResp(reqNo, resp); + } + public CallerAutoPilotControlManager getAutoPilotControlManager() { return CallerAutoPilotControlManager.INSTANCE; } @@ -594,23 +626,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) { - //CallerLogger.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autoPilotStatusInfo.getState()); - this.mAutopilotState = autoPilotStatusInfo.getState(); - if (mControllerStatusCallback != null) { - mControllerStatusCallback.onAutopilotState(autoPilotStatusInfo.getState()); - } - switch (autoPilotStatusInfo.getState()) { - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶 - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中 - break; - case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶 - break; - default: - break; - } + } @Override @@ -631,6 +647,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { if (status == 0x00) {//判断工控机重连后,获取当前正在执行的子任务,延时10秒,防止工控机连接上时SN为空 + CallerAutoPilotControlManager.INSTANCE.setIsSubscribeBackCameraVideoVideo(0, false);//TODO 当前3.2.0版本产品未规划后摄像头展示功能 UiThreadHandler.postDelayed(() -> { getCurrentTask(); }, 10000); @@ -666,11 +683,27 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onAutopilotStatusResponse(int state) { - // TODO: 2023/6/19 bingbing + //CallerLogger.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + state); + this.mAutopilotState = state; + if (mControllerStatusCallback != null) { + mControllerStatusCallback.onAutopilotState(state); + } + switch (state) { + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 + break; + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶 + break; + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中 + break; + case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶 + break; + default: + break; + } } @Override public void onAutopilotDockerInfo(@NonNull String dockerVersion) { - // TODO: 2023/6/19 bingbing + } } diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt index 9e353f8ac9..e63b6806fb 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt @@ -19,7 +19,7 @@ import com.mogo.och.sweepercloud.callback.SweeperCloudDialogClickListener import com.mogo.och.sweepercloud.constant.SweeperConst import com.mogo.och.sweepercloud.model.SweeperTaskModel import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog -import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType +import com.zhjt.mogo.adas.data.AiCloudTask import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.Location @@ -50,7 +50,7 @@ object SweeperCloudTaskUtils { * 模拟云控发送任务给pad */ @JvmStatic - fun mockSendCloudTaskInfo(messageType: MessageType) { + fun mockSendCloudTaskInfo(messageType: AiCloudTask.MessageType) { val builder = TaskInfo.newBuilder() builder.sn = getDriverSn() builder.taskId = "10" @@ -169,7 +169,7 @@ object SweeperCloudTaskUtils { builder.taskId = "10" builder.subTaskId = "1" SweeperTaskModel.getInstance().onSweeperFutianCloudTaskConfirm( - MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushTaskConfirm, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -185,7 +185,7 @@ object SweeperCloudTaskUtils { builder.subTaskId = "1" builder.taskStatus = SweeperCommon.TaskStatus.RUNNING SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus( - MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -200,7 +200,7 @@ object SweeperCloudTaskUtils { builder.taskId = "10" builder.type = SweeperTaskStop.StopTaskType.ADVANCE SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStop( - MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushTaskStop, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -216,7 +216,7 @@ object SweeperCloudTaskUtils { builder.taskStatus = SweeperCommon.TaskStatus.FINISHED builder.systemTime = System.currentTimeMillis() SweeperTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus( - MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) } @@ -233,7 +233,7 @@ object SweeperCloudTaskUtils { builder.code = SweeperCommon.Code.SUCCEED UiThreadHandler.getsUiHandler().postDelayed({ SweeperTaskModel.getInstance().onSweeperFutianCloudBootable( - MessageType.PadSendBootable, "${System.currentTimeMillis()}", + AiCloudTask.MessageType.PadSendBootable, "${System.currentTimeMillis()}", System.currentTimeMillis(), builder.build() ) }, 10000) diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamView.kt index 6449fc6f0c..336357d774 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamView.kt @@ -158,5 +158,6 @@ class RightRearCamView : ConstraintLayout , IMoGoBackCameraVideoListener, actv_cam_position_group?.visibility = VISIBLE } v_video_right_rear?.setImageBitmap(mBitmap) + v_video_right_rear?.scaleX = -1f } } \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt index 8b94afc975..75898fbfb0 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt @@ -4,14 +4,19 @@ import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View +import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import androidx.lifecycle.ViewModelProvider import com.elegant.utils.UiThreadHandler +import com.mogo.eagle.core.data.config.HdMapBuildConfig import com.mogo.eagle.core.utilcode.kotlin.onClick 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.util.OverlayViewUtils import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState import com.mogo.och.common.module.utils.FrameAnimatorContainer import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout @@ -25,22 +30,30 @@ import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.starting_ import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.taxi_p_autopilot_btn_bg import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.taxi_p_autopilot_starting import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.taxi_p_start_autopilot -import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.v_xiaozhi_belt_info_bg -import java.util.Arrays +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.cl_car_type /** * @author: wangmingjun * @date: 2022/6/14 */ -class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAutopilotCallback{ +class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAutopilotCallback { constructor(context: Context) : super(context) constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) - constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, + attributeSet, + defStyleAttr + ) - constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + constructor( + context: Context, + attributeSet: AttributeSet, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) companion object { private val TAG = StartAutopilotView::class.java.simpleName @@ -49,9 +62,9 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu var isStarting = false - private var taxiPStartAutopilot: FrameAnimatorContainer?=null - private var taxiPStartAutopilotCar: FrameAnimatorContainer?=null - private var taxiPXiaozhiBelt: FrameAnimatorContainer?=null + private var taxiPStartAutopilot: FrameAnimatorContainer? = null + private var taxiPStartAutopilotCar: FrameAnimatorContainer? = null + private var taxiPXiaozhiBelt: FrameAnimatorContainer? = null init { @@ -60,27 +73,35 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu private fun initView() { LayoutInflater.from(context).inflate(R.layout.taxi_p_start_autopilot_view, this, true) - taxiPStartAutopilotCar = FrameAnimatorContainer(R.array.taxi_p_start_autopilot_car, 20,taxi_p_autopilot_starting) - taxiPStartAutopilotCar?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPStartAutopilotCar = FrameAnimatorContainer( + R.array.taxi_p_start_autopilot_car, + 20, + taxi_p_autopilot_starting + ) + taxiPStartAutopilotCar?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") } }) - taxiPStartAutopilot = FrameAnimatorContainer(R.array.taxi_p_start_autopilot, 15,taxi_p_autopilot_btn_bg) - taxiPStartAutopilot?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPStartAutopilot = + FrameAnimatorContainer(R.array.taxi_p_start_autopilot, 15, taxi_p_autopilot_btn_bg,false) + taxiPStartAutopilot?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") } }) - taxiPXiaozhiBelt = FrameAnimatorContainer(R.array.xiaozhi_belt, 15,iv_xiaozhi_belt) - taxiPXiaozhiBelt?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPXiaozhiBelt = FrameAnimatorContainer(R.array.xiaozhi_belt, 15, iv_xiaozhi_belt) + taxiPXiaozhiBelt?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") } }) } - fun startAutopilotBgAnimatorDrawable(isStart: Boolean) { + private fun startAutopilotBgAnimatorDrawable(isStart: Boolean) { if (isStart) { taxiPStartAutopilot?.start() } else { @@ -103,42 +124,43 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu actv_orderinfo.text = show } - override fun setDoorStatus( - doorPosition: StartAutopilotViewModel.DoorPosition, - isOpen: Boolean - ) { + override fun setDoorStatus(doorPosition: DoorPosition, state: DoorState) { when (doorPosition) { - StartAutopilotViewModel.DoorPosition.FRONT_LEFT -> { - if(isOpen){ + DoorPosition.FRONT_LEFT -> { + if (state == DoorState.OPEN) { actv_front_left_door.visibility = VISIBLE - }else{ + } else { actv_front_left_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.FRONT_RIGHT -> { - if(isOpen){ + + DoorPosition.FRONT_RIGHT -> { + if (state == DoorState.OPEN) { actv_front_right_door.visibility = VISIBLE - }else{ + } else { actv_front_right_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.REAR_LEFT -> { - if(isOpen){ + + DoorPosition.REAR_LEFT -> { + if (state == DoorState.OPEN) { actv_rear_left_door.visibility = VISIBLE - }else{ + } else { actv_rear_left_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.REAR_RIGHT -> { - if(isOpen){ + + DoorPosition.REAR_RIGHT -> { + if (state == DoorState.OPEN) { actv_rear_right_door.visibility = VISIBLE - }else{ + } else { actv_rear_right_door.visibility = GONE } } - else ->{ - } + else -> { + + } } } @@ -149,15 +171,20 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu OverlayViewUtils.dismissOverlayView(this) } - fun updateStartAutopilotBtnStatus(isBoarded: Boolean) { + private fun updateStartAutopilotBtnStatus(isBoarded: Boolean) { taxi_p_start_autopilot?.let { if (isBoarded) { - it.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_color)) + it.setTextColor( + ContextCompat.getColor(context, R.color.taxi_p_start_autopilot_txt_color) + ) it.background = null } else { - it.background = ResourcesCompat.getDrawable(resources,R.drawable.taxi_p_start_autopilot_txt_btn_bg,null) + it.background = + ContextCompat.getDrawable(context, R.drawable.taxi_p_start_autopilot_txt_btn_bg) taxi_p_autopilot_btn_bg!!.background = null - it.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_un_color)) + it.setTextColor( + ContextCompat.getColor(context, R.color.taxi_p_start_autopilot_txt_un_color) + ) } it.tag = isBoarded it.text = resources.getString(R.string.taxi_p_start_autopilot_txt) @@ -165,7 +192,6 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu } - private fun startingCarBgAnimatorDrawable(isStart: Boolean) { if (isStart) { taxi_p_autopilot_starting!!.setImageResource(0) @@ -181,7 +207,9 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu if (start) { isStarting = true taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_loading) - taxi_p_start_autopilot?.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_color)) + taxi_p_start_autopilot?.setTextColor( + ContextCompat.getColor(context, R.color.taxi_p_start_autopilot_txt_color) + ) startingAutopilotCountDown() } else { clearBgAnimDrawable() @@ -214,6 +242,15 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_txt) } + override fun onVisibilityChanged(changedView: View, visibility: Int) { + super.onVisibilityChanged(changedView, visibility) + if (HdMapBuildConfig.currentCarVrIconRes == R.raw.hq_h9) { + cl_car_type.setBackgroundResource(R.drawable.taxi_p_start_panel__hq_bg) + } else { + cl_car_type.setBackgroundResource(R.drawable.taxi_p_start_panel__df_bg) + } + } + override fun onAttachedToWindow() { super.onAttachedToWindow() val viewModel = ViewModelProvider(this).get(StartAutopilotViewModel::class.java) diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt index 969d3a59a3..6926be8ce1 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt @@ -1,19 +1,19 @@ package com.mogo.och.taxi.passenger.ui.startautopilot import androidx.lifecycle.ViewModel -import chassis.Chassis -import chassis.Chassis.DoorNumber -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener -import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager 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.util.UiThreadHandler +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback import com.mogo.och.taxi.passenger.model.AutopilotManager import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import com.mogo.och.common.module.manager.devicemanage.TaxiDoorStateManager +import com.mogo.och.common.module.manager.devicemanage.callback.DoorStateCallback +import com.mogo.och.common.module.manager.devicemanage.data.DoorState class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback, - IMoGoChassisDoorStateListener { + DoorStateCallback { private val TAG = StartAutopilotViewModel::class.java.simpleName @@ -21,38 +21,28 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac init { TaxiPassengerModel.setOrderStatusCallback(TAG, this) - CallerChassisDoorStateListenerManager.addListener(TAG, this) + TaxiDoorStateManager.addListener(TAG,this) } fun setStartAutopilotCallback(viewCallback: StartAutopilotCallback) { this.viewCallback = viewCallback TaxiPassengerModel.startOrStopReadyToAutopilotLoop(true) setOrderInfo() - setDoorInfo() - } - - private fun setDoorInfo() { - val doorList = CallerChassisDoorStateListenerManager.getDoorList() - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化初始化:${doorList}") - doorList?.forEach { - exchangeEnum(it.number,it.status==1) - } } private fun setOrderInfo() { val currentOCHOrder = TaxiPassengerModel.currentOCHOrder currentOCHOrder?.let { val phone = it.passengerPhone - var show = "" - if (phone.length > 8) { + val show = if (phone.length > 8) { //截取电话号码前三位 - val phoneNumPre = phone.substring(0, 3); + val phoneNumPre = phone.substring(0, 3) //截取电话号码后四位 - val phoneNumFix = phone.substring(7); + val phoneNumFix = phone.substring(7) - show = "用户:$phoneNumPre****$phoneNumFix 目的地:${it.endSiteAddr}" + "用户:$phoneNumPre****$phoneNumFix 目的地:${it.endSiteAddr}" } else { - show = "用户:${phone} 目的地:${it.endSiteAddr}" + "用户:${phone} 目的地:${it.endSiteAddr}" } viewCallback?.setOrderInfo(show) } @@ -62,7 +52,7 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac super.onCleared() this.viewCallback = null TaxiPassengerModel.setOrderStatusCallback(TAG, null) - CallerChassisDoorStateListenerManager.removeListener(TAG) + TaxiDoorStateManager.removeListener(TAG) } override fun onDriverHasCheckedPilotCondition(isBoarded: Boolean) { @@ -76,41 +66,18 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac AutopilotManager.startAutopilot() } - override fun onAutopilotSingleDoorState(num: Chassis.DoorNumber, open: Boolean) { - super.onAutopilotSingleDoorState(num, open) - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${num}--${open}") - exchangeEnum(num,open) + override fun hasOpenDoor(have: Boolean) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "车门是否开着:${have}") } - private fun exchangeEnum(num: Chassis.DoorNumber,open: Boolean){ - when (num) { - DoorNumber.FRONT_LEFT -> { - runMain(DoorPosition.FRONT_LEFT,open) - } - - DoorNumber.FRONT_RIGHT -> { - runMain(DoorPosition.FRONT_RIGHT,open) - } - - DoorNumber.REAR_LEFT -> { - runMain(DoorPosition.REAR_LEFT,open) - } - - DoorNumber.REAR_RIGHT -> { - runMain(DoorPosition.REAR_RIGHT,open) - } - - DoorNumber.MIDDLE -> { - runMain(DoorPosition.MIDDLE,open) - } - - else -> {} - } + override fun doorStateChangeCallback(position: DoorPosition, state: DoorState) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${position}--${state}") + runMain(position,state) } - private fun runMain(posttion:DoorPosition,isOpen: Boolean){ + private fun runMain(posttion:DoorPosition,state: DoorState){ UiThreadHandler.post { - viewCallback?.setDoorStatus(posttion,isOpen) + viewCallback?.setDoorStatus(posttion,state) } } @@ -118,10 +85,6 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac interface StartAutopilotCallback { fun handleStartAutopilotBtnStatus(isBoarded: Boolean) fun setOrderInfo(show: String) - fun setDoorStatus(doorPosition: DoorPosition,isOpen:Boolean) - } - - enum class DoorPosition { - FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE + fun setDoorStatus(doorPosition: DoorPosition, state: DoorState) } } \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_start_panel_bg.png b/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_start_panel_bg.png deleted file mode 100644 index 784a482dcf..0000000000 Binary files a/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_start_panel_bg.png and /dev/null differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_start_panel__df_bg.webp b/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_start_panel__df_bg.webp new file mode 100644 index 0000000000..8772a761c5 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_start_panel__df_bg.webp differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_start_panel__hq_bg.webp b/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_start_panel__hq_bg.webp new file mode 100644 index 0000000000..85d316a7a6 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-xhdpi/taxi_p_start_panel__hq_bg.webp differ diff --git a/OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp b/OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp new file mode 100644 index 0000000000..e0ca986452 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp differ diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_setting_view.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_setting_view.xml index 94c9432ca1..614f38c2fd 100644 --- a/OCH/taxi/passenger/src/main/res/layout/taxi_p_setting_view.xml +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_setting_view.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" + android:clickable="true" android:background="@drawable/taxi_p_setting_view_bg"> : ViewMod val uiStateFlow: StateFlow = _uiStateFlow private val _uiIntentFlow: Channel = Channel() - val uiIntentFlow: Flow = _uiIntentFlow.receiveAsFlow() + private val uiIntentFlow: Flow = _uiIntentFlow.receiveAsFlow() init { viewModelScope.launch { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverCarServiceBean.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverCarServiceBean.kt index 3f705b6cc8..c0a9853fa9 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverCarServiceBean.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverCarServiceBean.kt @@ -7,19 +7,29 @@ import com.mogo.eagle.core.data.BaseData * @date: 2023/8/2 */ -data class GcjLatLon(var gcjLat: Double, var gcjLon: Double) +data class GcjLatLon( + var gcjLat: Double, var gcjLon: Double +) data class UnmannedLoginReqBean( - var phone: String?, - var captcha: String?, - var sn: String, - var loc: GcjLatLon? + var phone: String?, var captcha: String?, var sn: String, var loc: GcjLatLon? ) -data class UnmannedLogoutReqBean(var sn: String, var loc: GcjLatLon?) -data class StartServiceReqBean(var sn: String, var gcjLat: Double, var gcjLon: Double) +data class UnmannedLogoutReqBean( + var sn: String, var loc: GcjLatLon? +) -data class StartServiceRespBean(var data: Result?): BaseData(){ - data class Result(var siteId: Long,var siteName: String,var gcjLat: Double, var gcjLon: Double, - var wgs84Lon: Double, var wgs84Lat: Double ) +data class StartServiceReqBean( + var sn: String, var gcjLat: Double, var gcjLon: Double +) + +data class StartServiceRespBean(var data: Result?) : BaseData() { + data class Result( + var siteId: Long, + var siteName: String, + var gcjLat: Double, + var gcjLon: Double, + var wgs84Lon: Double, + var wgs84Lat: Double + ) } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverTaskWithOrderBean.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverTaskWithOrderBean.kt index a7fbcc2e5a..285c768168 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverTaskWithOrderBean.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiDriverTaskWithOrderBean.kt @@ -81,9 +81,11 @@ data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() { var endSite: Site?, var order: OrderDetail? ) { - //servingStatus = 0 //暂停接单 = 1 //开始接单 - //taskType = 1 //虚拟任务 = 2 //接驾任务 = 3 //送驾任务 - //currentStatus 0:空闲 1:获取任务 2:开始任务 3:到达目的地 + /** + * servingStatus: 0 -> 暂停接单 1 -> 开始接单 + * taskType: 1 -> 虚拟任务 2 -> 接驾任务 3-> 送驾任务 + * currentStatus: 0-> 空闲 1-> 获取任务 2-> 开始任务 3-> 到达目的地 + */ override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -161,13 +163,41 @@ data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() { } return data.currentStatus == TaskStatusEnum.StartTask.code } + + /** + * with task.currentStatus == CompleteTask + */ + fun isCompleteTaskType(data: QueryCurrentTaskRespBean.Result?): Boolean { + if (data == null) { + return false + } + return data.currentStatus == TaskStatusEnum.CompleteTask.code + } + + /** + * with task.currentStatus == GetTask + */ + fun isGetTaskType(data: QueryCurrentTaskRespBean.Result?): Boolean { + if (data == null) { + return false + } + return data.currentStatus == TaskStatusEnum.GetTask.code + } } } -data class StartTaskReqBean(var sn: String, var lineId: Long) +data class StartTaskReqBean( + var sn: String, var lineId: Long +) + +data class ArriveSiteReqBean( + var sn: String, var siteId: Long +) + +data class PrepareTaskReqBean( + var sn: String, var siteId: Long +) -data class ArriveSiteReqBean(var sn: String, var siteId: Long) -data class PrepareTaskReqBean(var sn: String, var siteId: Long) data class PrepareTaskRespBean(var data: Result?) : BaseData() { //taskType 1:虚拟任务 2:接驾任务3:送驾任务 data class Result( var lineId: Long, @@ -178,10 +208,22 @@ data class PrepareTaskRespBean(var data: Result?) : BaseData() { //taskType 1: ) } -data class JumpPassengerCheckReqBean(var sn: String, var orderNo: String) -data class CancelOrderReqBean(var sn: String, var orderNo: String, var cancelType: Int) -data class OrderCompletedReqBean(var sn: String, var orderNo: String) -data class QueryCarOrderByNoReqBean(var sn: String, var orderNo: String) +data class JumpPassengerCheckReqBean( + var sn: String, var orderNo: String +) + +data class CancelOrderReqBean( + var sn: String, var orderNo: String, var cancelType: Int +) + +data class OrderCompletedReqBean( + var sn: String, var orderNo: String +) + +data class QueryCarOrderByNoReqBean( + var sn: String, var orderNo: String +) + data class QueryCarOrderByNoRespBean(var data: Result) : BaseData() { data class Result( var sn: String, diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiControllerStatusCallback.java b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiControllerStatusCallback.java index 63ae42d3db..a2576ee2be 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiControllerStatusCallback.java +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiControllerStatusCallback.java @@ -19,4 +19,11 @@ public interface ITaxiControllerStatusCallback { //自动开启自动驾驶 void startOpenAutopilotNonManual(); + + //停止启动自动驾驶 + void stopOpenAutopilotNonManual(); + + void pauseOpenAutopilotNonManual(); + + void resumeOpenAutopilotNonManual(); } diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiOrderStatusCallback.java b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiOrderStatusCallback.java index 00457ab64a..52aaf096f8 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiOrderStatusCallback.java +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiOrderStatusCallback.java @@ -12,7 +12,4 @@ public interface ITaxiOrderStatusCallback { * @param isShow 是否显示导航地图(否播报声音) */ void onNaviToEnd(boolean isAmap, boolean isShow); - - // 当前位置距离上车点的距离(米)、预估时间(秒) - void onCurrentOrderDistToEndChanged(long meters, long timeInSecond); } diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiTaskWithOrderCallback.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiTaskWithOrderCallback.kt index 59992d55aa..036a9b7df2 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiTaskWithOrderCallback.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/callback/ITaxiTaskWithOrderCallback.kt @@ -5,13 +5,15 @@ import com.mogo.och.taxi.bean.TrajectoryListRespBean interface ITaxiTaskWithOrderCallback { fun onTaskWithOrderDataChanged(taskWithOrder: QueryCurrentTaskRespBean.Result?) - fun onTaskCompleted(isOrderArrivedAtStart: Boolean, siteId: Long) + fun onTaskCompleted(result: QueryCurrentTaskRespBean.Result) fun onTaskTrajectoryDataChanged(data: TrajectoryListRespBean?) fun onOrderCancel() fun onOrderArriveAtEnd(orderNo: String) - fun onOrderTotalMileAndDurationChanged(mileage: Float, duration: Int) + fun onOrderTripInfoChanged(mileage: Float, duration: Int) fun onOrderJourneyCompleted() - fun onStartAutopilot() - - fun onStartPrepareTask120s(isStart: Boolean) + fun onStartAutopilot(postDelayTime: Long) + fun onPauseStartAutopilot() + fun onStopAutopilot() + fun onStartPrepareTaskUI(delayTime: Long, isStart: Boolean) + fun onTaskTripInfoLocalCalculateChanged(meters:Long, timeInSecond:Long) } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/TaskTypeEnum.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/TaskTypeEnum.kt index 89f59132c6..9fbe236531 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/TaskTypeEnum.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/TaskTypeEnum.kt @@ -1,4 +1,8 @@ -package com.mogo.och.taxi.constant/** +package com.mogo.och.taxi.constant + +import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean + +/** * Created on 2023/8/7 * taskType = 1 虚拟任务(演练任务), = 2 接驾任务(运营), = 3 //送驾任务(运营) */ @@ -18,5 +22,15 @@ enum class TaskTypeEnum(val code: Int) { } return None } + + /** + * taskType == ToOrderStartTask.code 接驾任务 + */ + fun isToOrderStartTask(data: QueryCurrentTaskRespBean.Result?): Boolean { + if (data == null) { + return false + } + return data.taskType == ToOrderStartTask.code + } } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/TaxiDriverEventConst.java b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/TaxiDriverEventConst.java new file mode 100644 index 0000000000..f2dc8a3cff --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/TaxiDriverEventConst.java @@ -0,0 +1,16 @@ +package com.mogo.och.taxi.constant; + +public interface TaxiDriverEventConst { + + interface TaxiFragmentEvent { + String EVENT_TYPE_SHOW_DEBUG_VIEW = "event_type_taxi_fragment_show_debug_view"; + String EVENT_TYPE_SHOW_AMAP_NAVI_TO_STATION_FRAGMENT = "event_type_taxi_fragment_show_amap_navi_to_station_fragment"; + String EVENT_TYPE_SHOW_ROUTING_TO_STATION_FRAGMENT = "event_type_taxi_fragment_show_routing_to_station_fragment"; + String EVENT_TYPE_START_NAVI_TO_END_STATION = "event_type_taxi_fragment_start_navi_to_end_station"; + } + + interface TabFragmentEvent { + String EVENT_TYPE_SHOW_RED_POINT = "event_type_tab_fragment_show_red_point"; + String EVENT_TYPE_TASK_WITH_ORDER_CHANGED = "event_type_tab_fragment_task_with_order_changed"; + } +} diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceApi.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceApi.kt index 7bbfce05b0..cf3a4e1263 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceApi.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceApi.kt @@ -124,7 +124,7 @@ interface TaxiTaskWithOrderServiceApi { */ @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-taxi-cabin/api/business/v1/contrail") - fun contrailList( + fun queryTrajectoryByLindIds( @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, @Body data: Array diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceManager.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceManager.kt index ddc81e46be..de9673a2a6 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceManager.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiTaskWithOrderServiceManager.kt @@ -179,9 +179,9 @@ object TaxiTaskWithOrderServiceManager { context: Context, linIds: Array, callback: OchCommonServiceCallback? ) { - mOCHTaxiServiceApi.contrailList( + mOCHTaxiServiceApi.queryTrajectoryByLindIds( data = linIds ).transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "contrailList")) + .subscribe(OchCommonSubscribeImpl(context, callback, "queryTrajectoryByLindIds")) } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/BaseTaxiTabFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/BaseTaxiTabFragment.kt index a9ab0a9ed8..0ee272ed4a 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/BaseTaxiTabFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/BaseTaxiTabFragment.kt @@ -4,8 +4,6 @@ import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle -import android.os.Handler -import android.os.Looper import android.os.SystemClock import android.view.LayoutInflater import android.view.View @@ -23,6 +21,7 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager.initBa import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showToolsView import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView +import com.mogo.eagle.core.function.hmi.ui.widget.ParallelDriveView import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener @@ -50,6 +49,7 @@ import kotlinx.android.synthetic.main.taxi_base_fragment.module_och_autopilot_tv import kotlinx.android.synthetic.main.taxi_base_fragment.module_och_taxi_badcase_ll import kotlinx.android.synthetic.main.taxi_base_fragment.module_och_taxi_setting_layout import kotlinx.android.synthetic.main.taxi_base_fragment.module_och_taxi_swich_map_layout +import kotlinx.android.synthetic.main.taxi_base_fragment.parallelDriveView import kotlinx.android.synthetic.main.taxi_base_fragment.smallMapView import kotlinx.android.synthetic.main.taxi_base_fragment.startAutopilotAnimationView import kotlinx.android.synthetic.main.taxi_base_fragment.taxi_close_navi_icon @@ -75,11 +75,9 @@ abstract class BaseTaxiTabFragment> : MvpFragment> : MvpFragment> : MvpFragment> : MvpFragment> : MvpFragment> : MvpFragment> : MvpFragment> : MvpFragment(), // } } - private fun openOperationalInfoView() { - personalDialogFragment = WeakReference(TaxiPersonalDialogFragment()) - activity?.supportFragmentManager?.let { - personalDialogFragment!!.get() - ?.show(it, "service_data") - } - } +// private fun openOperationalInfoView() { +// personalDialogFragment = WeakReference(TaxiPersonalDialogFragment()) +// activity?.supportFragmentManager?.let { +// personalDialogFragment!!.get() +// ?.show(it, "service_data") +// } +// } override fun getTagName(): String { return "TaxiFragment" @@ -86,9 +87,7 @@ class TaxiFragment : BaseTaxiTabFragment(), super.onActivityCreated(savedInstanceState) loginService = ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation() as LoginService - if (loginService != null) { - loginService!!.registerFragment(this, presenter, TaxiDriverLoginImpl()) - } + loginService?.registerFragment(this, presenter, TaxiDriverLoginImpl()) } override fun onCreateView( @@ -112,12 +111,21 @@ class TaxiFragment : BaseTaxiTabFragment(), } } + override fun pauseStartAutopilot() { + mPresenter.pauseStartAutopilot() + } + + override fun resumeStartAutopilot(remainingTime: Long) { + mPresenter.resumeStartAutopilot(remainingTime) + } + override fun startNaviToEndStation(isShow: Boolean) { mPresenter.startNaviToEndStation(isShow) } override fun initViews() { super.initViews() + initFlowEvent() initFragment() hideDebugPanel() switchVRFlatMode(MogoStatusManager.getInstance().isVrMode) @@ -125,6 +133,29 @@ class TaxiFragment : BaseTaxiTabFragment(), initOrderDebugView() } + override fun stopAutoStartAutopilot() { + mPresenter.stopAutoStartAutopilot() + } + + private fun initFlowEvent() { + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_DEBUG_VIEW) + .register(this) { _ -> + clickOrderDebugView() + } + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_AMAP_NAVI_TO_STATION_FRAGMENT) + .register(this) { show -> + showAmapNaviToStationFragment(show) + } + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_ROUTING_TO_STATION_FRAGMENT) + .register(this) { show -> + showRoutingToStationFragment(show) + } + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_START_NAVI_TO_END_STATION) + .register(this) { show -> + startNaviToEndStation(show) + } + } + private fun initFragment() { taskTabFragment = WeakReference(TaxiTaskTabFragment.newInstance()) val transaction: FragmentTransaction = childFragmentManager.beginTransaction() @@ -147,11 +178,6 @@ class TaxiFragment : BaseTaxiTabFragment(), taskTabFragment!!.get()!!.onCarTakeOrderStatusChanged() } - fun updateNextTaskFragment(taskAndOrder: QueryCurrentTaskRespBean.Result?) { - if (null == taskTabFragment || taskTabFragment!!.get() == null) return - taskTabFragment!!.get()!!.onTaskDataChanged(taskAndOrder) - } - fun switchVRFlatMode(isVRMode: Boolean) { if (mRootView != null) { mRootView.visibility = if (isVRMode) View.VISIBLE else View.GONE @@ -243,7 +269,7 @@ class TaxiFragment : BaseTaxiTabFragment(), it.order!!.orderLine else it.lineId - ) + ,true) } } @@ -257,11 +283,15 @@ class TaxiFragment : BaseTaxiTabFragment(), findViewById(R.id.test_bar_route)?.setOnClickListener { testRouteInfoUpload() } - } - - fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) { - if (null == taskTabFragment || taskTabFragment!!.get() == null) return - taskTabFragment!!.get()!!.onCurrentTaskTripInfoChanged(meters, timeInSecond) + findViewById(R.id.test_brake)?.setOnClickListener { + TaxiTaskModel.handleBrakeStatusChange(false) + } + findViewById(R.id.test_resume_brake)?.setOnClickListener { + TaxiTaskModel.handleBrakeStatusChange(true) + } + findViewById(R.id.test_parallel_driver)?.setOnClickListener { + stopAutoStartAutopilot() + } } private fun testRouteInfoUpload() { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiPresenter.java b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiPresenter.java index 30857c7016..8b4ef9fda0 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiPresenter.java +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiPresenter.java @@ -9,6 +9,7 @@ import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; import com.mogo.och.common.module.biz.callback.ILoginCallback; @@ -77,7 +78,7 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS * 开启自动驾驶 自驾模式 */ public void startAutoPilot() { - TaxiTaskModel.INSTANCE.startAutoPilot(); + TaxiTaskModel.INSTANCE.startAutopilotByClick(); } // 登出 @@ -137,11 +138,6 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS runOnUIThread(() -> mView.onNaviToEnd(isAmap, isShow)); } - @Override - public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) { - runOnUIThread(() -> mView.onCurrentOrderDistToEndChanged(meters, timeInSecond)); - } - @Override public void onVRModeChanged(boolean isVRMode) { runOnUIThread(() -> mView.switchVRFlatMode(isVRMode)); @@ -171,6 +167,33 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS }); } + @Override + public void stopOpenAutopilotNonManual() { + runOnUIThread(() -> { + mView.startOrStopLoadingAnim(false); + mView.updateAutopilotStatus(CallerAutoPilotStatusListenerManager.INSTANCE.getState()); + mView.stopAutopilotBlinkAnimation(); + }); + } + + @Override + public void pauseOpenAutopilotNonManual() { + runOnUIThread(() -> { + mView.startOrStopLoadingAnim(false); + mView.updateAutopilotStatus(CallerAutoPilotStatusListenerManager.INSTANCE.getState()); + mView.pauseAutopilotBlinkAnimation(); + }); + } + + @Override + public void resumeOpenAutopilotNonManual() { + runOnUIThread(() -> { + mView.startOrStopLoadingAnim(true); + mView.resumeAutopilotBlinkAnimation(); + }); + } + + @Override public void loginSuccess(DriverStatusQueryRespBean data) { //设置 接单状态 @@ -196,4 +219,16 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS @Override public void loginFail(boolean isLogin) { } + + public void stopAutoStartAutopilot() { + TaxiTaskModel.INSTANCE.stopAutoStartAutopilot(); + } + + public void pauseStartAutopilot() { + TaxiTaskModel.INSTANCE.pauseStartAutopilot(); + } + + public void resumeStartAutopilot(long remainingTime) { + TaxiTaskModel.INSTANCE.resumeStartAutopilot(remainingTime); + } } diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/common/AvoidLeakDialog.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/common/AvoidLeakDialog.kt index 6896bf0e85..af22409590 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/common/AvoidLeakDialog.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/common/AvoidLeakDialog.kt @@ -24,8 +24,6 @@ open class AvoidLeakDialog : Dialog { override fun setOnShowListener(listener: OnShowListener?) {} override fun dismiss() { super.dismiss() - if (null != hostFragmentReference && null != hostFragmentReference!!.get()) { - hostFragmentReference!!.get()!!.dismissAllowingStateLoss() - } + hostFragmentReference?.get()?.dismissAllowingStateLoss() } } diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/DebugView.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/DebugView.kt index 3ffc879d6a..ba02fa0954 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/DebugView.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/debug/DebugView.kt @@ -177,7 +177,7 @@ public class DebugView @JvmOverloads constructor( initViewByData(taskWithOrder) } - override fun onTaskCompleted(isOrderArrivedAtStart: Boolean, siteId: Long) { + override fun onTaskCompleted(result: QueryCurrentTaskRespBean.Result) { } override fun onTaskTrajectoryDataChanged(data: TrajectoryListRespBean?) { @@ -189,15 +189,24 @@ public class DebugView @JvmOverloads constructor( override fun onOrderArriveAtEnd(orderNo: String) { } - override fun onOrderTotalMileAndDurationChanged(mileage: Float, duration: Int) { + override fun onOrderTripInfoChanged(mileage: Float, duration: Int) { } override fun onOrderJourneyCompleted() { } - override fun onStartAutopilot() { + override fun onStartAutopilot(postDelayTime: Long) { } - override fun onStartPrepareTask120s(isStart: Boolean) { + override fun onPauseStartAutopilot() { + } + + override fun onStopAutopilot() { + } + + override fun onStartPrepareTaskUI(delayTime: Long, isStart: Boolean) { + } + + override fun onTaskTripInfoLocalCalculateChanged(meters: Long, timeInSecond: Long) { } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaskUiState.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaskUiState.kt index a80e2adcbf..192297a0ee 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaskUiState.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaskUiState.kt @@ -23,7 +23,10 @@ sealed class TaskWithOrderUIState { data class TaskDriveToNearestStationTask(val driveToNearestStationTask: StartServiceRespBean.Result?) : TaskWithOrderUIState() - data class UpdateTaskTripInfo(val mileage: Float, val duration: Int) : TaskWithOrderUIState() + data class UpdateOrderTripInfo(val mileage: Float, val duration: Int) : TaskWithOrderUIState() - data class UpdatePrepareTaskDelay120S(val isStart: Boolean) : TaskWithOrderUIState() + data class UpdateTaskTripLocalCalculateInfo(val meters: Long, val timeInSecond: Long) : + TaskWithOrderUIState() + + data class UpdatePrepareTaskDelay(val delayTime: Long, val isStart: Boolean) : TaskWithOrderUIState() } diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt index 3ee54ae2d4..0bae199794 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt @@ -27,6 +27,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.map.AmapNaviToDestinationModel import com.mogo.och.common.module.map.ICommonNaviChangedCallback import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.FlowBus import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.common.module.wigets.OCHCommitDialog import com.mogo.och.taxi.R @@ -35,12 +36,11 @@ import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean import com.mogo.och.taxi.bean.StartServiceRespBean import com.mogo.och.taxi.constant.TaskStatusEnum import com.mogo.och.taxi.constant.TaskTypeEnum +import com.mogo.och.taxi.constant.TaxiDriverEventConst import com.mogo.och.taxi.constant.TaxiOrderStatusEnum import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_END_MAP_MAKER import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_START_MAP_MAKER -import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TIMER_PREPARE_TASK_INTERVAL_120S import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TYPE_MARKER_TAXI_ORDER -import com.mogo.och.taxi.ui.base.TaxiFragment import com.mogo.och.taxi.utils.MapMakerManager import com.mogo.och.taxi.utils.TaskUtils import kotlinx.android.synthetic.main.task_fragment_current.cancelOrder @@ -75,10 +75,8 @@ class TaxiCurrentTaskFragment : BaseFragment(), companion object { const val TAG = M_TAXI + "TaxiCurrentTaskFragment" - private var mTaxiFragment: TaxiFragment? = null - fun newInstance(taxiFragment: TaxiFragment?): TaxiCurrentTaskFragment { - mTaxiFragment = taxiFragment + fun newInstance(): TaxiCurrentTaskFragment { val args = Bundle() val fragment = TaxiCurrentTaskFragment() fragment.arguments = args @@ -145,7 +143,8 @@ class TaxiCurrentTaskFragment : BaseFragment(), private fun initTaskDebugViewListener() { taskStatus.setOnLongClickListener { - mTaxiFragment?.clickOrderDebugView() + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_DEBUG_VIEW) + .post(this.lifecycleScope, true) false } } @@ -166,7 +165,7 @@ class TaxiCurrentTaskFragment : BaseFragment(), if (taskAndOrderUiState.driveToNearestStationTask != null) { updateViewByDriveToNearestStationTask(taskAndOrderUiState.driveToNearestStationTask) } else { - updatePrepareTaskDelay120SUI(false) + updatePrepareTaskDelayUI(0, false) initContainerView(false) removeAllMapMarker() } @@ -184,7 +183,7 @@ class TaxiCurrentTaskFragment : BaseFragment(), updateViewByCurrentTaskWithOrder(currentTaskWithOrder) } - is TaskWithOrderUIState.UpdateTaskTripInfo -> { + is TaskWithOrderUIState.UpdateOrderTripInfo -> { taskOtherInfo.text = TaskUtils.getCurrentTaskTotalAndDurationHtml( taskAndOrderUiState.mileage, @@ -192,8 +191,18 @@ class TaxiCurrentTaskFragment : BaseFragment(), ) } - is TaskWithOrderUIState.UpdatePrepareTaskDelay120S -> { - updatePrepareTaskDelay120SUI(taskAndOrderUiState.isStart) + is TaskWithOrderUIState.UpdateTaskTripLocalCalculateInfo -> { + updateCurrentTaskTripInfo( + taskAndOrderUiState.meters, + taskAndOrderUiState.timeInSecond + ) + } + + is TaskWithOrderUIState.UpdatePrepareTaskDelay -> { + updatePrepareTaskDelayUI( + taskAndOrderUiState.delayTime, + taskAndOrderUiState.isStart + ) } } } @@ -203,35 +212,36 @@ class TaxiCurrentTaskFragment : BaseFragment(), /** * 更新120s倒计时 */ - private fun updatePrepareTaskDelay120SUI(isStart: Boolean) { + private fun updatePrepareTaskDelayUI(millisInFuture: Long, isStart: Boolean) { - if (!isStart){ - prepareTaskCountdownTv.visibility = View.GONE + if (!isStart) { + prepareTaskCountdownTv.visibility = View.GONE mPrepareTasCountDownTimer?.cancel() mPrepareTasCountDownTimer = null return } - prepareTaskCountdownTv.visibility = View.VISIBLE - mPrepareTasCountDownTimer = object : CountDownTimer(TIMER_PREPARE_TASK_INTERVAL_120S, 1000L) {// 5倒计时后开启自驾 + prepareTaskCountdownTv.visibility = View.VISIBLE + mPrepareTasCountDownTimer = + object : CountDownTimer(millisInFuture, 1000L) {// 5倒计时后开启自驾 - override fun onTick(millisUntilFinished: Long) { - // 倒计时 - UiThreadHandler.post { - prepareTaskCountdownTv.text = - "距离任务获取还有 ${DateTimeUtil.second2MMSS(millisUntilFinished/1000)}" + override fun onTick(millisUntilFinished: Long) { + // 倒计时 + UiThreadHandler.post { + prepareTaskCountdownTv.text = + "距离任务获取还有 ${DateTimeUtil.second2MMSS(millisUntilFinished / 1000)}" + } + } + + override fun onFinish() { + //倒计时结束了... + UiThreadHandler.post { + prepareTaskCountdownTv.visibility = View.GONE + } + mPrepareTasCountDownTimer?.cancel() } } - override fun onFinish() { - //倒计时结束了... - UiThreadHandler.post { - prepareTaskCountdownTv.visibility = View.GONE - } - mPrepareTasCountDownTimer?.cancel() - } - } - mPrepareTasCountDownTimer?.start() } @@ -283,9 +293,21 @@ class TaxiCurrentTaskFragment : BaseFragment(), } } - private fun updateNextTaskFragment(taskAndOrder: QueryCurrentTaskRespBean.Result?) { - mTaxiFragment?.let { - it.updateNextTaskFragment(taskAndOrder) + private fun updateNextTaskFragment(result: QueryCurrentTaskRespBean.Result?) { + FlowBus.with(TaxiDriverEventConst.TabFragmentEvent.EVENT_TYPE_TASK_WITH_ORDER_CHANGED) + .post(this.lifecycleScope, result) + + if (result != null + && result.taskType == TaskTypeEnum.VirtualTask.code + && result.order != null + && result.currentStatus != TaskStatusEnum.CompleteTask.code + ) { + VoiceNotice.showNotice("已为您提前接到下一订单,待完成当前任务后服务") + FlowBus.with(TaxiDriverEventConst.TabFragmentEvent.EVENT_TYPE_SHOW_RED_POINT) + .post(this.lifecycleScope, true) + } else { + FlowBus.with(TaxiDriverEventConst.TabFragmentEvent.EVENT_TYPE_SHOW_RED_POINT) + .post(this.lifecycleScope, false) } } @@ -302,24 +324,21 @@ class TaxiCurrentTaskFragment : BaseFragment(), */ private fun updateRemainDistanceAndTime(isVoicePlay: Boolean) { val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() ?: return + d(TAG, "updateRemainDistanceAndTime ${currentTaskWithOrder.currentStatus}") + if (currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code) { + if (currentTaskWithOrder.endSite != null) { + startNaviToStation( + isVoicePlay, currentTaskWithOrder.endSite!!.gcjLat, + currentTaskWithOrder.endSite!!.gcjLon + ) + } - if (currentTaskWithOrder.endSite != null - && currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code + } else if (currentTaskWithOrder.currentStatus == TaskStatusEnum.CompleteTask.code && + currentTaskWithOrder.taskType <= TaskTypeEnum.ToOrderStartTask.code ) { - startNaviToStation( - isVoicePlay, currentTaskWithOrder.endSite!!.gcjLat, - currentTaskWithOrder.endSite!!.gcjLon - ) - return - } - - if (currentTaskWithOrder.startSite != null - && currentTaskWithOrder.currentStatus == TaskStatusEnum.GetTask.code - ) { //演练任务和送驾任务 - startNaviToStation( - isVoicePlay, currentTaskWithOrder.startSite!!.gcjLat, - currentTaskWithOrder.startSite!!.gcjLon - ) + taskOtherInfo.text = "已到达 ${currentTaskWithOrder.endSite?.siteName}" + } else { + taskOtherInfo.text = "距离 -- 公里, 用时 -- 分钟" } } @@ -353,12 +372,19 @@ class TaxiCurrentTaskFragment : BaseFragment(), when (taskType) { TaskTypeEnum.None.code -> { if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) { - handleOrderView(order) updateOrderUI(order) } } TaskTypeEnum.VirtualTask.code -> { //演练任务 + + if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) { + updateOrderUI(order) + updateMapMarkers(taskAndOrder) + updateRemainDistanceAndTime(false) + return + } + cancelOrder.visibility = View.GONE orderPhoneAndNum.visibility = if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code @@ -374,10 +400,6 @@ class TaxiCurrentTaskFragment : BaseFragment(), pathwayPoint.visibility = View.GONE - if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) { - updateOrderUI(order) - return - } if (startSite == null || endSite == null) return taskStatus.text = resources.getString(R.string.task_start_end_site) @@ -386,14 +408,13 @@ class TaxiCurrentTaskFragment : BaseFragment(), taskTypeTv.text = resources.getString(R.string.task_exercise) startStationName.text = startSite.siteName endStationName.text = endSite.siteName - updatePrepareTaskDelay120SUI(false) + updatePrepareTaskDelayUI(0, false) updateStartAndEndStationPointByStatus(true) } TaskTypeEnum.ToOrderEndTask.code, TaskTypeEnum.ToOrderStartTask.code -> {// 接驾任务 或 送驾任务 order?.also { - updatePathwayPoint(taskType,endSite?.siteName) - handleOrderView(it) + updatePathwayPoint(taskType, endSite?.siteName) updateOrderUI(it) } } @@ -403,7 +424,7 @@ class TaxiCurrentTaskFragment : BaseFragment(), updateRemainDistanceAndTime(false) } - private fun updatePathwayPoint(taskType: Int,endSiteName: String?) { + private fun updatePathwayPoint(taskType: Int, endSiteName: String?) { if (TextUtils.isEmpty(endSiteName)) return pathwayPoint.visibility = if (taskType == TaskTypeEnum.ToOrderStartTask.code) View.VISIBLE else View.GONE @@ -475,7 +496,22 @@ class TaxiCurrentTaskFragment : BaseFragment(), } private fun updateOrderUI(order: OrderDetail) { - updatePrepareTaskDelay120SUI(false) + cancelOrder.visibility = View.VISIBLE + orderPhoneAndNum.visibility = View.VISIBLE + taskClickBtn.visibility = View.VISIBLE + taskTypeTv.visibility = View.VISIBLE +// orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点, +// 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消 + naviToStart.visibility = if (order.orderStatus + == TaxiOrderStatusEnum.OnTheWayToStart.code + ) View.VISIBLE else View.GONE + + naviToEnd.visibility = if (order.orderStatus + == TaxiOrderStatusEnum.OnTheWayToEnd.code + ) View.VISIBLE else View.GONE + taskOtherInfo.visibility = View.VISIBLE + + updatePrepareTaskDelayUI(0, false) taskTypeTv.text = resources.getString(R.string.task_order) taskTypeTv.background = ContextCompat.getDrawable( @@ -547,32 +583,15 @@ class TaxiCurrentTaskFragment : BaseFragment(), } } - private fun handleOrderView(order: OrderDetail?) { - if (order == null) return - cancelOrder.visibility = View.VISIBLE - orderPhoneAndNum.visibility = View.VISIBLE - taskClickBtn.visibility = View.VISIBLE - taskTypeTv.visibility = View.VISIBLE -// orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点, -// 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消 - naviToStart.visibility = if (order.orderStatus - == TaxiOrderStatusEnum.OnTheWayToStart.code - ) View.VISIBLE else View.GONE - - naviToEnd.visibility = if (order.orderStatus - == TaxiOrderStatusEnum.OnTheWayToEnd.code - ) View.VISIBLE else View.GONE - - taskOtherInfo.visibility = View.VISIBLE - } - - private fun hideNaviBtns() { naviToStart.visibility = View.GONE naviToEnd.visibility = View.GONE AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi() - mTaxiFragment?.showAmapNaviToStationFragment(false) - mTaxiFragment?.showRoutingToStationFragment(false) + + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_AMAP_NAVI_TO_STATION_FRAGMENT) + .post(this.lifecycleScope, false) + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_ROUTING_TO_STATION_FRAGMENT) + .post(this.lifecycleScope, false) } private fun startNaviToStation(isVoicePlay: Boolean, stationLat: Double, stationLng: Double) { @@ -595,16 +614,25 @@ class TaxiCurrentTaskFragment : BaseFragment(), * @param meters 米 * @param timeInSecond 秒 */ - fun updateCurrentTaskTripInfo(meters: Long, timeInSecond: Long) { - val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() ?: return - if (currentTaskWithOrder.endSite == null && currentTaskWithOrder == null) return - d("NaviToDestinationModel", "taskUitl, ${TaskUtils.getCurrentTaskTripHtml(meters, timeInSecond)}") - taskOtherInfo.text = TaskUtils.getCurrentTaskTripHtml(meters, timeInSecond) + private fun updateCurrentTaskTripInfo(meters: Long, timeInSecond: Long) { + UiThreadHandler.post { + val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() ?: return@post + d( + TAG, + "updateCurrentTaskTripInfo, taskUtil, ${ + TaskUtils.getCurrentTaskTripHtml( + meters, + timeInSecond + ) + }" + ) + taskOtherInfo.text = TaskUtils.getCurrentTaskTripHtml(meters, timeInSecond) + } } override fun onDestroyView() { AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi() - updatePrepareTaskDelay120SUI(false) + updatePrepareTaskDelayUI(0, false) super.onDestroyView() } @@ -687,7 +715,8 @@ class TaxiCurrentTaskFragment : BaseFragment(), * @param isShow */ private fun showNaviToEndStationFragment(isShow: Boolean) { - mTaxiFragment?.startNaviToEndStation(isShow) + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_START_NAVI_TO_END_STATION) + .post(this.lifecycleScope, isShow) } override fun onCurrentNaviDistAndTimeChanged(meters: Int, timeInSecond: Long) { @@ -697,7 +726,8 @@ class TaxiCurrentTaskFragment : BaseFragment(), override fun reInitNaviAmap(isPlay: Boolean, isRestart: Boolean) { d(TAG, "isPlay = $isPlay, isRestart=$isRestart") if (!isRestart) { - mTaxiFragment?.showAmapNaviToStationFragment(false) + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_AMAP_NAVI_TO_STATION_FRAGMENT) + .post(this.lifecycleScope, false) return } val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() @@ -715,7 +745,8 @@ class TaxiCurrentTaskFragment : BaseFragment(), } if ((currentTaskWithOrder?.currentStatus == TaskStatusEnum.StartTask.code && currentTaskWithOrder.order == null) - || (currentTaskWithOrder?.order?.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code)) { + || (currentTaskWithOrder?.order?.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code) + ) { if (naviToEnd.visibility == View.GONE) { naviToEnd.visibility = View.VISIBLE } @@ -726,10 +757,14 @@ class TaxiCurrentTaskFragment : BaseFragment(), fun onNaviToEndStationByAmap(isShow: Boolean) { val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() ?: return - mTaxiFragment?.showAmapNaviToStationFragment( - if (currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code) - isShow else true - ) + FlowBus.with(TaxiDriverEventConst.TaxiFragmentEvent.EVENT_TYPE_SHOW_AMAP_NAVI_TO_STATION_FRAGMENT) + .post( + this.lifecycleScope, + if (currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code) + isShow + else + true + ) updateRemainDistanceAndTime( if (currentTaskWithOrder.currentStatus == TaskStatusEnum.StartTask.code) isShow else true diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt index cab5dae978..62ae3073ba 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt @@ -12,6 +12,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.utils.ToastUtilsOch import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.och.common.module.wigets.StartAutopilotAnimationView import com.mogo.och.taxi.R import com.mogo.och.taxi.base.BaseViewModel import com.mogo.och.taxi.base.IUiIntent @@ -21,6 +22,7 @@ import com.mogo.och.taxi.bean.TrajectoryListRespBean import com.mogo.och.taxi.callback.ITaxiCarServiceCallback import com.mogo.och.taxi.callback.ITaxiTaskWithOrderCallback import com.mogo.och.taxi.constant.TaskStatusEnum +import com.mogo.och.taxi.constant.TaskTypeEnum import com.mogo.och.taxi.constant.TaxiOrderStatusEnum import com.mogo.och.taxi.constant.TaxiUnmannedConst import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager @@ -142,7 +144,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } } - private fun startTask() { + private fun startTask(isStartAutopilot: Boolean = true) { if (!TaxiTaskModel.checkCurrentTaskCondition()) { ToastUtils.showShort("无任务!") return @@ -154,7 +156,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), it.order!!.orderLine else it.lineId - ) + ,isStartAutopilot) } } @@ -173,11 +175,11 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } } - private fun updatePrepareTaskDelay120SUI(isStart: Boolean){ + private fun updatePrepareTaskDelayUI(delayTime: Long, isStart: Boolean) { d(TAG, "UpdatePrepareTaskDelay120SUI = $isStart") sendUiState { copy( - taskWithOrderUIState = TaskWithOrderUIState.UpdatePrepareTaskDelay120S( + taskWithOrderUIState = TaskWithOrderUIState.UpdatePrepareTaskDelay(delayTime, isStart ) ) @@ -195,30 +197,63 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } } - private fun updateOrderTotalMileAndDurationUI(mileage: Float, duration: Int) { - d(TAG, "updateOrderTotalMileAndDurationUI") + private fun updateOrderTripInfoUI(mileage: Float, duration: Int) { + d(TAG, "updateOrderTripInfoUI") sendUiState { copy( - taskWithOrderUIState = TaskWithOrderUIState.UpdateTaskTripInfo( + taskWithOrderUIState = TaskWithOrderUIState.UpdateOrderTripInfo( mileage, duration ) ) } } + private fun updateTaskTripInfoLocalCalculateUI(meters: Long, timeInSecond: Long) { + d(TAG, "UpdateTaskTripInfoLocalCalculateUI") + sendUiState { + copy( + taskWithOrderUIState = TaskWithOrderUIState.UpdateTaskTripLocalCalculateInfo( + meters, timeInSecond + ) + ) + } + } + override fun onTaskWithOrderDataChanged(result: QueryCurrentTaskRespBean.Result?) { d(TAG, "onTaskWithOrderChanged = result = " + GsonUtil.jsonFromObject(result)) DebugView.printInfoMsg("[查询TaskWithOrder信息] 更新数据, 刷新UI") updateTaskAndOrderUi(result) } - override fun onTaskCompleted(isOrderArrivedAtStart: Boolean, siteId: Long) { - d(TAG, "onTaskCompleted: isOrderArrivedAtStart=$isOrderArrivedAtStart, siteId=$siteId") - if (isOrderArrivedAtStart) { - TaxiTaskModel.removePrepareTaskDelay120S() - TaxiTaskModel.prepareNextTask(siteId) - } else { - TaxiTaskModel.startPrepareTaskDelay120S(siteId) + /** + * 开始倒计时120s或者10s拉取任务 + * 演练任务120s拉取 + * 接驾任务10s拉取 + */ + override fun onTaskCompleted(result: QueryCurrentTaskRespBean.Result) { + d(TAG, "onTaskCompleted: ${result?.currentStatus}, siteId=${result?.endSite?.siteId}") + + if (result.order != null && result.servingStatus == 1){ + if (result.taskType <= TaskTypeEnum.VirtualTask.code + && result.order!!.orderStatus < TaxiOrderStatusEnum.ArriveAtStart.code) { + VoiceNotice.showNotice("已为您接到订单") + } + if (result.taskType == TaskTypeEnum.ToOrderStartTask.code + && result.order!!.orderStatus == TaxiOrderStatusEnum.ArriveAtStart.code){ + VoiceNotice.showNotice("已到达上车地点,等待乘客上车") + } + } + + if (QueryCurrentTaskRespBean.isUserArriveAtStart(result)) { + TaxiTaskModel.removePrepareTaskDelay() + TaxiTaskModel.prepareNextTask(0,result.endSite!!.siteId) + }else if (!QueryCurrentTaskRespBean.isOrderArriveAtStart(result) + || !QueryCurrentTaskRespBean.isOrderArriveAtEnd(result)){ + TaxiTaskModel.startPrepareTaskDelay( + if (TaskTypeEnum.isToOrderStartTask(result)) + TaxiUnmannedConst.START_AUTOPILOT_COUNTDOWN_INTERVAL + else TaxiUnmannedConst.TIMER_PREPARE_TASK_INTERVAL_120S, + result.endSite!!.siteId) } } @@ -229,15 +264,19 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), override fun onOrderCancel() { VoiceNotice.showNotice("已取消行程") // updateTaskAndOrderUi(null) + //取消自驾,D档位会溜车 map3.6.0 修改 + TaxiTaskModel.cancelAutopilot() } override fun onOrderArriveAtEnd(orderNo: String) { TaxiTaskModel.queryOrderByOrderNo(orderNo) } - override fun onOrderTotalMileAndDurationChanged(mileage: Float, duration: Int) { - //更新总全程信息(公里和分钟) - updateOrderTotalMileAndDurationUI(mileage, duration) + /** + * 更新总全程信息(公里和分钟), 后端返回的数据 + */ + override fun onOrderTripInfoChanged(mileage: Float, duration: Int) { + updateOrderTripInfoUI(mileage, duration) } override fun onOrderJourneyCompleted() { @@ -245,22 +284,46 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), //获取新的任务 val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() currentTaskWithOrder?.endSite?.also { - TaxiTaskModel.startPrepareTaskDelay120S(it.siteId) + TaxiTaskModel.startPrepareTaskDelay(TaxiUnmannedConst.TIMER_PREPARE_TASK_INTERVAL_120S, + it.siteId) } } - override fun onStartAutopilot() { - UiThreadHandler.postDelayed({ - startTask() //状态流转 - VoiceNotice.showNotice("车辆正在自动开启自动驾驶") - }, TaxiUnmannedConst.START_AUTOPILOT_COUNTDOWN_INTERVAL) // 10s后开启自驾, 状态流转 + override fun onStartAutopilot(postDelayTime: Long) { + UiThreadHandler.postDelayed(startTaskRunnable, postDelayTime) // 10s后或者倒计时继续开启自驾, 状态流转 + } + + private val startTaskRunnable: Runnable = Runnable { + startTask() //状态流转 + VoiceNotice.showNotice("车辆正在自动开启自动驾驶") } /** - * 开始倒计时120拉取任务 + * 主动请求平行驾驶, 停止启动自驾命令, 任务状态需向下流转 */ - override fun onStartPrepareTask120s(isStart: Boolean) { - updatePrepareTaskDelay120SUI(isStart) + override fun onStopAutopilot() { + UiThreadHandler.removeCallbacks(startTaskRunnable) + startTask(false) + } + + override fun onPauseStartAutopilot() { + UiThreadHandler.removeCallbacks(startTaskRunnable) + } + + /** + * 开始倒计时120s或者10s拉取任务 + * 演练任务120s拉取 + * 接驾任务10s拉取 + */ + override fun onStartPrepareTaskUI(delayTime: Long, isStart: Boolean) { + updatePrepareTaskDelayUI(delayTime, isStart) + } + + /** + * 更新本次任务行程信息, 本地计算的数据 + */ + override fun onTaskTripInfoLocalCalculateChanged(meters: Long, timeInSecond: Long) { + updateTaskTripInfoLocalCalculateUI(meters, timeInSecond) } override fun onCarEndServiceSuccess( @@ -269,7 +332,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), ) { if (currentTaskWithOrder?.endSite != null && (currentTaskWithOrder.currentStatus < TaskStatusEnum.CompleteTask.code - ||currentTaskWithOrder.order != null) + || currentTaskWithOrder.order != null) ) { VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦") return diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt index a522dc0862..b2f3ec6b94 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt @@ -20,14 +20,17 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener +import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingActionsListener import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02 +import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingActionsListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager 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.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i @@ -76,6 +79,7 @@ import com.mogo.och.taxi.ui.debug.DebugView import com.mogo.och.taxi.utils.RxJavaUtils import com.mogo.och.taxi.utils.TaxiAnalyticsManager import com.mogo.och.taxi.utils.TaxiTrajectoryManager +import com.zhjt.mogo.adas.data.bean.UnableLaunchReason import com.zhjt.service.chain.ChainLog import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers @@ -136,7 +140,7 @@ object TaxiTaskModel { private val mCurrentTaskRoutePointsGcj: MutableList = ArrayList() - private var mPrepareTaskDelay120SRunnable: Runnable? = null + private var mPrepareTaskDelayRunnable: Runnable? = null fun addTaskWithOrderListener(tag: String, listener: ITaxiTaskWithOrderCallback) { if (mTaxiTaskWithOrderCallbackMap.containsKey(tag)) { @@ -225,6 +229,8 @@ object TaxiTaskModel { AbnormalFactorsLoopManager.startLoopAbnormalFactors(mContext) TrajectoryAndDistanceManager.addDistanceListener(TAG, localCalculateDistanceListener) TrajectoryAndDistanceManager.addTrajectoryListener(TAG, localCalculateTrajectoryListener) + //3.6.0后平行驾驶.刹车 且只用于东风和红旗. 3.6.0前没有 + CallerParallelDrivingActionsListenerManager.addListener(TAG,mParallelDrivingActionsListener) } private fun releaseListeners() { @@ -241,6 +247,38 @@ object TaxiTaskModel { CallerPlanningRottingListenerManager.removeListener(mMogoAutopilotPlanningListener) OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null) AbnormalFactorsLoopManager.stopLoopAbnormalFactors() + CallerParallelDrivingActionsListenerManager.removeListener(TAG) + } + + // 监听平行驾驶、刹车, 试用于MAP3.6.0以上 且只用于东风和红旗 + private val mParallelDrivingActionsListener: IMoGoParallelDrivingActionsListener = + object : IMoGoParallelDrivingActionsListener { + override fun onParallelDrivingAbility( + isParallelDrivingAbility: Boolean, + unableParallelDrivingReasons: ArrayList? + ) { + if (unableParallelDrivingReasons != null) { + if (unableParallelDrivingReasons.toString().contains(UnableLaunchReason.SourceType.CHASSIS.name) + && unableParallelDrivingReasons.toString().contains(UnableLaunchReason.UnableType.BRAKE.name)) { + //刹车变化回调 + d(TAG,"onParallelDrivingAbility = $isParallelDrivingAbility," + + " unableParallelDrivingReasons = ${unableParallelDrivingReasons.toString()}" ) + handleBrakeStatusChange(isParallelDrivingAbility) + } + } + } + } + + /** + * brakeStatus: true: 恢复启动自驾 + * false: 暂停启动自驾 + */ + fun handleBrakeStatusChange(brakeStatus: Boolean) { + if (brakeStatus){ + mControllerStatusCallback?.resumeOpenAutopilotNonManual() + }else{ + mControllerStatusCallback?.pauseOpenAutopilotNonManual() + } } private val mMogoAutopilotStatusListener: IMoGoAutopilotStatusListener = @@ -259,7 +297,7 @@ object TaxiTaskModel { if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { DebugView.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_RUNNING,meaning=自动驾驶中") mADASStatusCallback?.onAutopilotRunning() - if ((QueryCurrentTaskRespBean.isOrderOnTheWayToEnd(mCurrentTaskWithOrder))) { + if ((QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder))) { TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent( isRestartAutopilot, true, @@ -283,12 +321,9 @@ object TaxiTaskModel { DebugView.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_ENABLE,meaning=可自动驾驶,人工干预状态") if ((FunctionBuildConfig.isDemoMode && checkCurrentTaskCondition() - && (QueryCurrentTaskRespBean.isOrderOnTheWayToEnd( - mCurrentTaskWithOrder - ) - || QueryCurrentTaskRespBean.isOrderArriveAtEnd( - mCurrentTaskWithOrder - ))) + && (QueryCurrentTaskRespBean.isOrderOnTheWayToEnd(mCurrentTaskWithOrder) + || QueryCurrentTaskRespBean.isOrderArriveAtEnd(mCurrentTaskWithOrder)) + ) ) { // 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态 return @@ -298,12 +333,9 @@ object TaxiTaskModel { DebugView.printInfoMsg("[自驾状态变化] afterValue=STATUS_AUTOPILOT_DISABLE,meaning=不可自动驾驶") if ((FunctionBuildConfig.isDemoMode && checkCurrentTaskCondition() - && (QueryCurrentTaskRespBean.isOrderOnTheWayToEnd( - mCurrentTaskWithOrder - ) - || QueryCurrentTaskRespBean.isOrderArriveAtEnd( - mCurrentTaskWithOrder - ))) + && (QueryCurrentTaskRespBean.isOrderOnTheWayToEnd(mCurrentTaskWithOrder) + || QueryCurrentTaskRespBean.isOrderArriveAtEnd(mCurrentTaskWithOrder)) + ) ) { // 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态 return @@ -315,12 +347,9 @@ object TaxiTaskModel { DebugView.printInfoMsg("[自驾状态变化] afterValue=STATUS_PARALLEL_DRIVING,meaning=平行驾驶中") if (FunctionBuildConfig.isDemoMode) { if ((checkCurrentTaskCondition() - && (QueryCurrentTaskRespBean.isOrderOnTheWayToEnd( - mCurrentTaskWithOrder - ) - || QueryCurrentTaskRespBean.isOrderArriveAtEnd( - mCurrentTaskWithOrder - ))) + && (QueryCurrentTaskRespBean.isOrderOnTheWayToEnd(mCurrentTaskWithOrder) + || QueryCurrentTaskRespBean.isOrderArriveAtEnd(mCurrentTaskWithOrder)) + ) ) { //订单中 // 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态 } else { //美化模式下没订单,显示人工驾驶 @@ -482,10 +511,12 @@ object TaxiTaskModel { TAG, "dynamicCalculateRouteInfo: lastSumLength=$lastSumLength, lastTime=$lastTime, threadName=Thread.currentThread().name" ) - mOrderStatusCallback?.onCurrentOrderDistToEndChanged( - lastSumLength.toLong(), - lastTime.toLong() - ) + mTaxiTaskWithOrderCallbackMap.forEach { + val listener = it.value + listener.onTaskTripInfoLocalCalculateChanged( + lastSumLength.toLong(), + lastTime.toLong()) + } } } @@ -599,8 +630,8 @@ object TaxiTaskModel { if (isArriveAtEndSite) { updateLocalCalculateStation() - //到站后不再调用取消自驾. 原因是取消自驾,D档位会溜车 - //cancelAutopilot() + //取消自驾,D档位会溜车 map3.6.0 修改 + cancelAutopilot() } } @@ -716,18 +747,6 @@ object TaxiTaskModel { mCurrentTaskWithOrder = result - if (result.order != null && result.currentStatus == TaskStatusEnum.CompleteTask.code - && result.servingStatus == 1){ - if (result.taskType <= TaskTypeEnum.VirtualTask.code - && result.order!!.orderStatus < TaxiOrderStatusEnum.ArriveAtStart.code) { - VoiceNotice.showNotice("已为您接到订单") - } - if (result.taskType == TaskTypeEnum.ToOrderStartTask.code - && result.order!!.orderStatus == TaxiOrderStatusEnum.ArriveAtStart.code){ - VoiceNotice.showNotice("已到达上车地点,等待乘客上车") - } - } - // 任务为空 if (result.endSite == null && result.order == null) { d(TAG, "queryCurrentTaskOnce: 任务为空") @@ -745,17 +764,10 @@ object TaxiTaskModel { // 主要是解决A-B演练任务同时接到A-B订单状态流转的问题 //注意: 需要去除到达乘客上车点的节点, 这个节点不拉取任务 if (result?.currentStatus == TaskStatusEnum.CompleteTask.code - && (!QueryCurrentTaskRespBean.isOrderArriveAtStart(result) - || !QueryCurrentTaskRespBean.isOrderArriveAtEnd(result)) ) { mTaxiTaskWithOrderCallbackMap.forEach { val listener = it.value - listener.onTaskCompleted( - QueryCurrentTaskRespBean.isUserArriveAtStart( - result - ), - result.endSite!!.siteId - ) + listener.onTaskCompleted(result) } } @@ -789,7 +801,7 @@ object TaxiTaskModel { mControllerStatusCallback?.startOpenAutopilotNonManual() mTaxiTaskWithOrderCallbackMap.forEach { val listener = it.value - listener.onStartAutopilot() + listener.onStartAutopilot(TaxiUnmannedConst.START_AUTOPILOT_COUNTDOWN_INTERVAL) } } } @@ -800,6 +812,7 @@ object TaxiTaskModel { listener.onTaskWithOrderDataChanged(mCurrentTaskWithOrder) } } + updateDemoModeAndAutopilotParameters(result) } } @@ -833,8 +846,9 @@ object TaxiTaskModel { fun updateLocalCalculateStation() { if (mCurrentTaskWithOrder == null) return if (mCurrentTaskWithOrder!!.startSite != null && mCurrentTaskWithOrder!!.endSite != null - && mCurrentTaskWithOrder!!.currentStatus <= TaskStatusEnum.StartTask.code + && mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.StartTask.code ) { + d(TAG, "updateLocalCalculateStation start") val curTaskAndOrder = getCurrentTaskWithOrder() ?: return if (curTaskAndOrder.startSite != null && curTaskAndOrder.endSite != null) { val startStation = MogoLocation() @@ -846,6 +860,8 @@ object TaxiTaskModel { setStationPoint(startStation, endStation, curTaskAndOrder.lineId) } } else { + d(TAG, "updateLocalCalculateStation stop") + AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi() setStationPoint(null, null, -1L) } } @@ -869,7 +885,7 @@ object TaxiTaskModel { TaxiOrderStatusEnum.ArriveAtEnd.code -> { mTaxiTaskWithOrderCallbackMap.forEach { val listener = it.value - listener.onOrderTotalMileAndDurationChanged( + listener.onOrderTripInfoChanged( data.data.mileage, data.data.duration.toInt() ) @@ -896,7 +912,7 @@ object TaxiTaskModel { }) } - fun startTask(lineId: Long) { + fun startTask(lineId: Long, isStartAutopilot: Boolean) { DebugView.printInfoMsg("[开始任务] 准备发送请求,lindId=$lineId") TaxiTaskWithOrderServiceManager.startTask( mContext, @@ -904,7 +920,9 @@ object TaxiTaskModel { object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { DebugView.printInfoMsg("[开始任务] 请求success,lindId=$lineId") - startAutoPilot() //自驾开启 + if (isStartAutopilot){ + startAutoPilot() //自驾开启 + } d(TAG, "startTask onSuccess: data=${GsonUtil.jsonFromObject(data)}") } @@ -927,7 +945,7 @@ object TaxiTaskModel { }) } - fun prepareNextTask(siteId: Long) { + fun prepareNextTask(delayTime: Long,siteId: Long) { DebugView.printInfoMsg("[PrepareNextTask] 准备发送请求, siteId=$siteId") TaxiTaskWithOrderServiceManager.prepareTask( mContext, @@ -946,39 +964,39 @@ object TaxiTaskModel { DebugView.printErrorMsg("[PrepareNextTask] 请求fail, code=$code ,msg=$msg") d(TAG, "prepareNextTask onFail: code=$code ,msg=$msg") if (LoginStatusManager.isLogin() && TaxiCarServingStatusManager.isCarServingStatus()) { - startPrepareTaskDelay120S(siteId) + startPrepareTaskDelay(delayTime,siteId) } } }) } - fun startPrepareTaskDelay120S(siteId: Long) { - removePrepareTaskDelay120S() + fun startPrepareTaskDelay(delayTime: Long, siteId: Long) { + removePrepareTaskDelay() - mPrepareTaskDelay120SRunnable = Runnable { - prepareNextTask(siteId) + mPrepareTaskDelayRunnable = Runnable { + prepareNextTask(delayTime,siteId) } mTaxiTaskWithOrderCallbackMap.forEach { val listener = it.value - listener.onStartPrepareTask120s(true) + listener.onStartPrepareTaskUI(delayTime,true) } - DebugView.printInfoMsg("[PrepareNextTask] 倒计时${TaxiUnmannedConst.TIMER_PREPARE_TASK_INTERVAL_120S / 1000}秒后prepareNextTask, siteId=$siteId") + DebugView.printInfoMsg("[PrepareNextTask] 倒计时${delayTime / 1000}秒后prepareNextTask, siteId=$siteId") UiThreadHandler.postDelayed( - mPrepareTaskDelay120SRunnable, - TaxiUnmannedConst.TIMER_PREPARE_TASK_INTERVAL_120S + mPrepareTaskDelayRunnable, + delayTime ) } - fun removePrepareTaskDelay120S() { - if (mPrepareTaskDelay120SRunnable != null) { + fun removePrepareTaskDelay() { + if (mPrepareTaskDelayRunnable != null) { DebugView.printInfoMsg("[PrepareNextTask] removeCallbacks, 取消prepareNextTask倒计时") - UiThreadHandler.removeCallbacks(mPrepareTaskDelay120SRunnable) + UiThreadHandler.removeCallbacks(mPrepareTaskDelayRunnable) mTaxiTaskWithOrderCallbackMap.forEach { val listener = it.value - listener.onStartPrepareTask120s(false) + listener.onStartPrepareTaskUI(0,false) } - mPrepareTaskDelay120SRunnable = null + mPrepareTaskDelayRunnable = null } } @@ -986,7 +1004,7 @@ object TaxiTaskModel { * 查询当前任务的轨迹 */ fun queryTaskTrajectoryByLineIds(planningLineIds: Array, currentTaskLineId: Long) { - DebugView.printInfoMsg("[查询轨迹信息] 准备发送请求,currentTaskLineId=$currentTaskLineId, planningLineIds=$planningLineIds") + DebugView.printInfoMsg("[查询轨迹信息] 准备发送请求,currentTaskLineId=$currentTaskLineId, planningLineIds=${GsonUtil.jsonFromObject(planningLineIds)}") TaxiTaskWithOrderServiceManager.queryTrajectoryByLindIds( mContext, planningLineIds, @@ -996,7 +1014,7 @@ object TaxiTaskModel { TAG, "queryTaskTrajectoryByLineIds onSuccess: ${GsonUtil.jsonFromObject(data?.data)}" ) - DebugView.printInfoMsg("[查询轨迹信息] 请求success, currentTaskLineId=$currentTaskLineId, planningLineIds=$planningLineIds") + DebugView.printInfoMsg("[查询轨迹信息] 请求success, currentTaskLineId=$currentTaskLineId, planningLineIds=${GsonUtil.jsonFromObject(planningLineIds)}") data?.data?.also { mTaskTrajectoryList.addAll(it) mCurrentTaskTrajectory = it.first { currentTaskLineId == it.lineId } @@ -1094,6 +1112,19 @@ object TaxiTaskModel { nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_TAXI_START_AUTOPILOT, paramIndexes = [-1] ) + + fun startAutopilotByClick(){ + //订单状态流转成功, 点击了开启自驾按钮, 启动自驾 + if (QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)) { + startAutoPilot() + }else if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)){ + startTask(mCurrentTaskWithOrder!!.lineId, true) + }else{ + e(TAG, "task currentStatus is not StartTask.") + DebugView.printInfoMsg("[启自驾] task currentStatus is not StartTask") + } + } + fun startAutoPilot() { DebugView.printInfoMsg("[启自驾] startAutoPilot") if (!checkCurrentTaskCondition()) { @@ -1107,6 +1138,7 @@ object TaxiTaskModel { e(TAG, "no order or order is empty.") DebugView.printErrorMsg("[启自驾] 轨迹信息不存在!") ToastUtils.showShort("轨迹信息不存在!") + return } //根据开关和后台是否发布轨迹启动自驾 @@ -1144,12 +1176,6 @@ object TaxiTaskModel { return } - //在订单状态还没流转成功时, 点击了开启自驾按钮, 先去做状态流转成功再启动自驾 - if (mCurrentTaskWithOrder!!.currentStatus == TaskStatusEnum.GetTask.code) { - startTask(mCurrentTaskWithOrder!!.lineId) - return - } - //点击开始自动驾驶按钮订单状态去流转, 不再与自动驾驶是否启动成功挂钩 isRestartAutopilot = mCurrentTaskWithOrder!!.currentStatus != TaskStatusEnum.StartTask.code @@ -1158,6 +1184,7 @@ object TaxiTaskModel { e(TAG, "AutopilotControlParameters is empty.") return } + CallerAutoPilotControlManager.startAutoPilot(parameters) DebugView.printInfoMsg("[启自驾] 调用成功") d( @@ -1375,22 +1402,16 @@ object TaxiTaskModel { } } - //更新本地currentOrder信息,并保存订单到本地避免车机重启丢失数据 - private fun updateNativeCurrentOrder(data: QueryCurrentTaskRespBean.Result?) { + //运营模式(美化模式), 鹰眼数据同步 + private fun updateDemoModeAndAutopilotParameters(data: QueryCurrentTaskRespBean.Result?) { if (data == null) { return } - mCurrentTaskWithOrder = data - SharedPrefsMgr.getInstance(mContext!!).putString( - TaxiUnmannedConst.SP_KEY_OCH_TAXI_ORDER, - GsonUtil.jsonFromObject(data) - ) + val endSite = data.endSite - val currentOrder = mCurrentTaskWithOrder!!.order - - if (currentOrder != null) { - if (currentOrder!!.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code) { + if (endSite != null) { + if (QueryCurrentTaskRespBean.isStartTaskType(data)) { if (FunctionBuildConfig.isDemoMode) { // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true @@ -1400,7 +1421,7 @@ object TaxiTaskModel { } updateAutopilotControlParameters() } - if (currentOrder!!.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code) { + if (QueryCurrentTaskRespBean.isCompleteTaskType(data)) { if (FunctionBuildConfig.isDemoMode) { d(TAG, "setIPCDemoMode:false") CallerAutoPilotControlManager.setIPCDemoMode(false) @@ -1461,4 +1482,31 @@ object TaxiTaskModel { } startAutoPilot() } + + fun stopAutoStartAutopilot() { + d( + TAG, "stopAutoStartAutopilot = ${mCurrentTaskWithOrder?.currentStatus}" + ) + if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)){ + mControllerStatusCallback?.stopOpenAutopilotNonManual() + mTaxiTaskWithOrderCallbackMap.forEach { + val listener = it.value + listener.onStopAutopilot() + } + } + } + + fun pauseStartAutopilot(){ + mTaxiTaskWithOrderCallbackMap.forEach { + val listener = it.value + listener.onPauseStartAutopilot() + } + } + + fun resumeStartAutopilot(remainingTime: Long){ + mTaxiTaskWithOrderCallbackMap.forEach { + val listener = it.value + listener.onStartAutopilot(remainingTime) + } + } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskTabFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskTabFragment.kt index 4b1f35b416..23b4470f7d 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskTabFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskTabFragment.kt @@ -15,12 +15,10 @@ import com.google.android.material.tabs.TabLayout import com.mogo.commons.mvp.BaseFragment import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.och.common.module.utils.FlowBus import com.mogo.och.taxi.R import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean -import com.mogo.och.taxi.constant.TaskStatusEnum -import com.mogo.och.taxi.constant.TaskTypeEnum -import com.mogo.och.taxi.ui.base.TaxiFragment +import com.mogo.och.taxi.constant.TaxiDriverEventConst import kotlinx.android.synthetic.main.taxi_server_orders_panel.module_och_taxi_tab import kotlinx.android.synthetic.main.taxi_server_orders_panel.module_och_taxi_view_pager import kotlinx.android.synthetic.main.taxi_server_orders_panel.wait_order_num @@ -69,6 +67,7 @@ class TaxiTaskTabFragment : BaseFragment() { override fun initViews() { initTaskTab() + initEventBus() } private fun initTaskTab() { @@ -84,9 +83,7 @@ class TaxiTaskTabFragment : BaseFragment() { if (TAB_POSITION_CURRENT == position) { module_och_taxi_tab.addTab(tab, true) changeTabLayoutUI(tab, true) - currentTaskFragment = TaxiCurrentTaskFragment.newInstance( - parentFragment as TaxiFragment? - ) + currentTaskFragment = TaxiCurrentTaskFragment.newInstance() mFragments.add(currentTaskFragment!!) } else if (TAB_POSITION_NEXT == position) { module_och_taxi_tab.addTab(tab) @@ -183,30 +180,22 @@ class TaxiTaskTabFragment : BaseFragment() { } } - fun onNaviToEndStationByAMap(isShow: Boolean) { - if (null == currentTaskFragment) return - currentTaskFragment!!.onNaviToEndStationByAmap(isShow) + private fun initEventBus() { + FlowBus.with(TaxiDriverEventConst.TabFragmentEvent.EVENT_TYPE_SHOW_RED_POINT) + .register(this) { show -> + wait_order_num.visibility = if (show) View.VISIBLE else View.GONE + } + FlowBus.with(TaxiDriverEventConst.TabFragmentEvent.EVENT_TYPE_TASK_WITH_ORDER_CHANGED) + .register(this) { taskWithOrder -> + nextTaskFragment?.onTaskDataChanged(taskWithOrder) + } } - fun onCurrentTaskTripInfoChanged(meters: Long, timeInSecond: Long) { - if (null == currentTaskFragment) return - currentTaskFragment!!.updateCurrentTaskTripInfo(meters, timeInSecond) + fun onNaviToEndStationByAMap(isShow: Boolean) { + currentTaskFragment?.onNaviToEndStationByAmap(isShow) } fun onCarTakeOrderStatusChanged() { - if (null == currentTaskFragment) return - currentTaskFragment!!.onCarTakeOrderStatusChanged() - } - - fun onTaskDataChanged(result: QueryCurrentTaskRespBean.Result?) { - if (null == nextTaskFragment) return - if (result != null && result.taskType == TaskTypeEnum.VirtualTask.code - && result.order != null && result.currentStatus != TaskStatusEnum.CompleteTask.code) { - VoiceNotice.showNotice("已为您提前接到下一订单,待完成当前任务后服务") - wait_order_num.visibility = View.VISIBLE - } else { - wait_order_num.visibility = View.GONE - } - nextTaskFragment!!.onTaskDataChanged(result) + currentTaskFragment?.onCarTakeOrderStatusChanged() } } diff --git a/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_base_fragment.xml b/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_base_fragment.xml index 21cc58f09d..3c54af9231 100644 --- a/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_base_fragment.xml +++ b/OCH/taxi/unmanned-driver/src/main/res/layout/taxi_base_fragment.xml @@ -186,6 +186,15 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/viewDriverMsgBoxButton" /> + + + +