Merge branch 'dev_robotaxi-d_230809_6.0.0' into dev_robotaxi-d_230809_6.0.0_refactor

This commit is contained in:
aibingbing
2023-08-30 16:36:31 +08:00
33 changed files with 292 additions and 59 deletions

View File

@@ -54,7 +54,20 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo
}
public String getAutopilotUnAbilityReason(){
return unableAutopilotReasons == null ? "" : unableAutopilotReasons.toString();//TODO 临时toString 需要拼接数据
try {
if(unableAutopilotReasons==null||unableAutopilotReasons.isEmpty()){
return "未知异常";
}else {
StringBuilder stringBuilder = new StringBuilder();
for (UnableAutopilotReason unableAutopilotReason : unableAutopilotReasons) {
stringBuilder.append(unableAutopilotReason.toString()).append("\n");
}
return stringBuilder.toString();
}
}catch (Exception e){
e.printStackTrace();
return "未知异常";
}
}
public String getStartFailedCode() {

View File

@@ -0,0 +1,47 @@
package com.mogo.och.common.module.wigets
import android.content.Context
import android.util.AttributeSet
import android.view.View
import androidx.appcompat.widget.AppCompatImageView
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.R
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
import com.mogo.och.common.module.manager.loopmanager.LoopInfo
class DriverConnectStatusView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AppCompatImageView(context, attrs, defStyleAttr) {
companion object {
const val TAG = "StatusBarView"
}
init {
setImageResource(R.drawable.driver_connect_statis)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
BizLoopManager.setLoopFunction(TAG, LoopInfo(3, ::showConnectStatusWithDriver))
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
BizLoopManager.removeLoopFunction(TAG)
}
private fun showConnectStatusWithDriver(){
UiThreadHandler.post {
CallerLogger.d(TAG,"司机屏连接状态:${CallerTelematicManager.getClientConnStatus()}")
visibility = if(CallerTelematicManager.getClientConnStatus()){
View.GONE
}else{
View.VISIBLE
}
}
}
}

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#717B98"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1 0,1.43 -0.98,2.63 -2.31,2.98l1.46,1.46C20.88,15.61 22,13.95 22,12c0,-2.76 -2.24,-5 -5,-5zM16,11h-2.19l2,2L16,13zM2,4.27l3.11,3.11C3.29,8.12 2,9.91 2,12c0,2.76 2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1 0,-1.59 1.21,-2.9 2.76,-3.07L8.73,11L8,11v2h2.73L13,15.27L13,17h1.73l4.01,4L20,19.74 3.27,3 2,4.27z"/>
</vector>

View File

@@ -38,6 +38,7 @@ class TaxiPassengerConst {
const val EVENT_PARAM_START_NAME = "start_name"
const val EVENT_PARAM_END_NAME = "end_name"
const val EVENT_PARAM_ORDER_NUMBER = "order_num"
const val EVENT_PARAM_LINE_ID = "line_id"
const val EVENT_PARAM_START_RESULT = "start_autopilot" // true/false
const val EVENT_PARAM_START_FAILURE_CODE = "start_autopilot_failure_code" // 启动自驾失败code
const val EVENT_PARAM_START_FAILURE_MSG = "start_autopilot_failure_msg" // 启动自驾失败原因

View File

@@ -80,7 +80,9 @@ object AutopilotManager : IMoGoAutopilotStatusListener {
+ " ,startSiteName=" + TaxiPassengerModel.currentOCHOrder!!.startSiteAddr
+ " ,endSiteName=" + TaxiPassengerModel.currentOCHOrder!!.endSiteAddr
)
TaxiPassengerAnalyticsManager.triggerStartAutopilotEvent(false, false, TaxiPassengerModel.currentOCHOrder!!.startSiteAddr, TaxiPassengerModel.currentOCHOrder!!.endSiteAddr, TaxiPassengerModel.currentOCHOrder!!.orderNo)
TaxiPassengerAnalyticsManager.triggerStartAutopilotEvent(false, false, TaxiPassengerModel.currentOCHOrder!!.startSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.endSiteAddr, TaxiPassengerModel.currentOCHOrder!!.orderNo,
TaxiPassengerModel.currentOCHOrder!!.lineId)
}
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
@@ -162,7 +164,8 @@ object AutopilotManager : IMoGoAutopilotStatusListener {
true,
TaxiPassengerModel.currentOCHOrder!!.startSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.endSiteAddr,
TaxiPassengerModel.currentOCHOrder!!.orderNo
TaxiPassengerModel.currentOCHOrder!!.orderNo,
TaxiPassengerModel.currentOCHOrder!!.lineId
)
//startServicePilotDone()
}

View File

@@ -64,7 +64,8 @@ object TaxiPassengerAnalyticsManager {
* @param restart false点击'开始服务'启动)/true接管后点击'自动驾驶'按钮启动)
* @param send 是否直接发送埋点15s内开启成功则直接发送成功埋点
*/
fun triggerStartAutopilotEvent(restart: Boolean, send: Boolean, startName: String, endName: String, orderNo: String) {
fun triggerStartAutopilotEvent(restart: Boolean, send: Boolean, startName: String, endName: String,
orderNo: String, lineId: Long) {
mStartAutopilotKey = if (restart) TaxiPassengerConst.EVENT_KEY_RESTART_AUTOPILOT else TaxiPassengerConst.EVENT_KEY_START_SERVICE
if (send) {
@@ -86,6 +87,7 @@ object TaxiPassengerAnalyticsManager {
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_START_NAME] = startName
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_END_NAME] = endName
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_ORDER_NUMBER] = orderNo
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_LINE_ID] = lineId
startAutopiloTimeOut = RxUtils.createSubscribeOnOwnThread(TaxiPassengerConst.LOOP_PERIOD_15S) {
// 15s内未开启上报失败埋点
triggerStartAutopilotFailureEvent("", "15s后app等待超时")

View File

@@ -8,6 +8,15 @@
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
tools:ignore="MissingDefaultResource">
<com.mogo.och.common.module.wigets.DriverConnectStatusView
app:layout_constraintTop_toTopOf="@+id/vShowDebugView"
app:layout_constraintBottom_toBottomOf="@+id/gl_horizontal"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_381"
android:layout_width="@dimen/dp_41"
android:layout_height="@dimen/dp_41"/>
<!--Wifi状态-->
<com.mogo.eagle.core.function.hmi.ui.widget.WifiStateView
android:id="@+id/wifiStateView"

View File

@@ -142,6 +142,16 @@ data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() {
return data.order!!.orderStatus == TaxiOrderStatusEnum.ArriveAtStart.code
}
fun isUserArriveAtStart(data: QueryCurrentTaskRespBean.Result?): Boolean {
if (data == null) {
return false
}
if (data.order == null) {
return false
}
return data.order!!.orderStatus == TaxiOrderStatusEnum.UserArriveAtStart.code
}
/**
* with task.currentStatus == StartTask
*/

View File

@@ -16,6 +16,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis
import com.mogo.eagle.core.function.main.MainMoGoApplication
import com.mogo.eagle.core.network.utils.GsonUtil
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
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI
import com.mogo.eagle.core.utilcode.util.ClickUtils
@@ -231,7 +232,11 @@ class TaxiCurrentTaskFragment : BaseFragment(),
}
fun onCarTakeOrderStatusChanged() {
mViewModel.sendUiIntent(TaskUiIntent.StartOrEndTakeOrder)
if (this::mViewModel.isInitialized) {
mViewModel.sendUiIntent(TaskUiIntent.StartOrEndTakeOrder)
} else {
e(TAG, "onCarTakeOrderStatusChanged: mViewModel is not Initialized")
}
}
/**
@@ -419,7 +424,10 @@ class TaxiCurrentTaskFragment : BaseFragment(),
MainMoGoApplication.getApp().applicationContext,
R.drawable.task_order_type_btn_bg
)
orderPhoneAndNum.text = TaskUtils.getCurrentTaskPhoneNumAndPassengerCountHtml(order.bookingUserPhone, order.passengerSize)
orderPhoneAndNum.text = TaskUtils.getCurrentTaskPhoneNumAndPassengerCountHtml(
order.bookingUserPhone,
order.passengerSize
)
startStationName.text = order.orderStartSite?.siteName
endStationName.text = order.orderEndSite?.siteName
@@ -532,6 +540,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
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)
}

View File

@@ -91,18 +91,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
private fun cancelOrder(cancelType: Int) {
val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder()
currentTaskWithOrder?.order?.also {
cancelOrder(AbsMogoApplication.getApp().applicationContext,
it.orderNo,
cancelType,
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
d(TAG, "handleCancelOrder() = onSuccess")
}
override fun onFail(code: Int, msg: String?) {
d(TAG, "handleCancelOrder() $code $msg")
}
})
TaxiTaskModel.cancelOrder(it.orderNo,cancelType)
}
}
@@ -220,7 +209,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
override fun onOrderCancel() {
VoiceNotice.showNotice("订单已经取消")
updateTaskAndOrderUi(null)
// updateTaskAndOrderUi(null)
}
override fun onOrderArriveAtEnd(orderNo: String) {
@@ -244,7 +233,6 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
override fun onStartAutopilot() {
UiThreadHandler.postDelayed({
startTask() //状态流转
TaxiTaskModel.startAutoPilot() //自驾开启
VoiceNotice.showNotice("车辆正在自动开启自动驾驶")
}, TaxiUnmannedConst.START_AUTOPILOT_COUNTDOWN_INTERVAL) // 10s后开启自驾, 状态流转
}
@@ -253,12 +241,17 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
driveToNearestStationTask: StartServiceRespBean.Result?,
currentTaskWithOrder: QueryCurrentTaskRespBean.Result?
) {
if (currentTaskWithOrder?.endSite != null && currentTaskWithOrder.startSite != null && currentTaskWithOrder.currentStatus < TaskStatusEnum.CompleteTask.code) {
if (currentTaskWithOrder?.endSite != null && currentTaskWithOrder.startSite != null
&& currentTaskWithOrder.currentStatus < TaskStatusEnum.CompleteTask.code) {
VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦")
} else {
VoiceNotice.showNotice("暂停接单啦")
}
// TODO 如果当前有订单就不要刷新
if (currentTaskWithOrder?.startSite != null &&
currentTaskWithOrder.endSite != null){
return
}
updateDriveToNearestStationTaskUI(driveToNearestStationTask)
}

View File

@@ -7,6 +7,7 @@ import android.view.View
import androidx.core.content.ContextCompat
import com.mogo.commons.mvp.BaseFragment
import com.mogo.eagle.core.function.main.MainMoGoApplication
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.taxi.R
import com.mogo.och.taxi.bean.OrderDetail
@@ -14,6 +15,7 @@ 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.utils.TaskUtils
import kotlinx.android.synthetic.main.task_fragment_current.cancelOrder
import kotlinx.android.synthetic.main.task_fragment_current.endStationName
import kotlinx.android.synthetic.main.task_fragment_current.mCurrentTaskLayout
import kotlinx.android.synthetic.main.task_fragment_current.naviToEnd
@@ -49,6 +51,17 @@ class TaxiNextTaskFragment : BaseFragment() {
}
override fun initViews() {
cancelOrder.onClick { //取消待服务订单
val currentWithOrder = TaxiTaskModel.getCurrentTaskWithOrder()
if (currentWithOrder?.order != null) {
val order = currentWithOrder.order
activity?.also {
TaxiOrderCancelDialog(it, order!!.orderStatus) { type ->
TaxiTaskModel.cancelOrder(order.orderNo,type)
}.show()
}
}
}
showNoNextTaskView()
}

View File

@@ -53,6 +53,11 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
private void initReasonArray() {
TaxiOrderStatusEnum ochStatus = TaxiOrderStatusEnum.valueOf(mOrderStatus);
switch (ochStatus) {
case None:
mContentArrays = new String[]{TaxiOrderCancelReasons.BookPassengerCancel.getMsg(),
TaxiOrderCancelReasons.CarBroken.getMsg(), TaxiOrderCancelReasons.BookJourneyConflict.getMsg(),
TaxiOrderCancelReasons.BatteryLow.getMsg(), TaxiOrderCancelReasons.BookOther.getMsg()};
return;
case OnTheWayToStart:
mContentArrays = new String[]{TaxiOrderCancelReasons.CarBroken.getMsg(), TaxiOrderCancelReasons.DeviceBroken.getMsg(),
TaxiOrderCancelReasons.BatteryLow.getMsg(), TaxiOrderCancelReasons.DriverIsIll.getMsg(),

View File

@@ -675,21 +675,26 @@ object TaxiTaskModel {
// 任务为空
if (result.endSite == null && result.order == null) {
d(TAG, "queryCurrentTaskOnce: 任务为空")
mCurrentTaskWithOrder = null
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onTaskWithOrderDataChanged(null)
// mCurrentTaskWithOrder = null
if (mDriveToNearestStationTask == null) {
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onTaskWithOrderDataChanged(null)
}
}
return
}
//当前任务完成且订单状态到达乘客上车点, 则立马去拉取任务 不再等30s,否则送驾任务要等30s后才能去执行
if (result?.currentStatus == TaskStatusEnum.CompleteTask.code) {
//当前任务完成且订单状态到达乘客上车点, 则立马去拉取任务 不再等120s,否则送驾任务要等120s后才能去执行(8.29废)
//8.29更新: 当前任务完成且订单状态为乘客已上车, 则立马去拉取任务 不再等120s,否则送驾任务要等120s后才能去执行
// 主要是解决A-B演练任务同时接到A-B订单状态流转的问题
//注意: 需要去除到达乘客上车点的节点, 这个节点不拉取任务
if (result?.currentStatus == TaskStatusEnum.CompleteTask.code
&& !QueryCurrentTaskRespBean.isOrderArriveAtStart(result)) {
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onTaskCompleted(
QueryCurrentTaskRespBean.isOrderArriveAtStart(
QueryCurrentTaskRespBean.isUserArriveAtStart(
result
),
result.endSite!!.siteId
@@ -747,6 +752,23 @@ object TaxiTaskModel {
})
}
/**
* 取消订单 进行中/待服务
*/
fun cancelOrder(orderNo: String,cancelType: Int){
TaxiTaskWithOrderServiceManager.cancelOrder(AbsMogoApplication.getApp().applicationContext,
orderNo, cancelType,
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
d(TAG, "handleCancelOrder() = onSuccess")
}
override fun onFail(code: Int, msg: String?) {
d(TAG, "handleCancelOrder() $code $msg")
}
})
}
fun updateLocalCalculateStation() {
if (mCurrentTaskWithOrder == null) return
if (mCurrentTaskWithOrder!!.startSite != null && mCurrentTaskWithOrder!!.endSite != null
@@ -776,7 +798,7 @@ object TaxiTaskModel {
when (data.data.orderStatus) {
TaxiOrderStatusEnum.Cancel.code -> {
//更新本地标志位
mCurrentTaskWithOrder?.order = null
mCurrentTaskWithOrder = null
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onOrderCancel()
@@ -795,7 +817,7 @@ object TaxiTaskModel {
TaxiOrderStatusEnum.JourneyCompleted.code -> {
//更新本地标志位
mCurrentTaskWithOrder?.order = null
mCurrentTaskWithOrder = null
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onOrderJourneyCompleted()
@@ -819,6 +841,7 @@ object TaxiTaskModel {
lineId,
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
startAutoPilot() //自驾开启
d(TAG, "startTask onSuccess: data=${GsonUtil.jsonFromObject(data)}")
}
@@ -1109,8 +1132,8 @@ object TaxiTaskModel {
"judgeEndStation() stationAngle = $stationAngle"
)
if ((!checkCurrentTaskCondition()
|| (getCurTaskStatus() == TaskStatusEnum.StartTask.code))
if (!checkCurrentTaskCondition()
|| getCurTaskStatus() != TaskStatusEnum.StartTask.code
) {
i(TAG, "task null or TaskStatus = ${getCurTaskStatus()}")
return

View File

@@ -27,6 +27,7 @@ class TaxiPassengerConst {
const val EVENT_PARAM_START_NAME = "start_name"
const val EVENT_PARAM_END_NAME = "end_name"
const val EVENT_PARAM_ORDER_NUMBER = "order_num"
const val EVENT_PARAM_LINE_ID = "line_id"
const val EVENT_PARAM_START_RESULT = "start_autopilot" // true/false
const val EVENT_PARAM_START_FAILURE_CODE = "start_autopilot_failure_code" // 启动自驾失败code
const val EVENT_PARAM_START_FAILURE_MSG = "start_autopilot_failure_msg" // 启动自驾失败原因
@@ -38,6 +39,7 @@ class TaxiPassengerConst {
const val EVENT_PARAM_UNABLE_START_REASON = "unable_start_reason"
//任务类型
const val TaskType_NONE = 0 // 无任务
const val TaskType_VIRTUAL = 1 // 虚拟任务
const val TaskType_DRIVE_TO_START = 2 // 接驾任务
const val TaskType_DRIVE_TO_END = 3 //送驾任务

View File

@@ -86,7 +86,8 @@ object AutopilotManager : IMoGoAutopilotStatusListener {
false,
TaxiPassengerModel.currentOCHOrder!!.orderStartSite.siteName,
TaxiPassengerModel.currentOCHOrder!!.orderEndSite.siteName,
TaxiPassengerModel.currentOCHOrder!!.orderNo
TaxiPassengerModel.currentOCHOrder!!.orderNo,
TaxiPassengerModel.currentLineId
)
}
@@ -173,7 +174,8 @@ object AutopilotManager : IMoGoAutopilotStatusListener {
true,
TaxiPassengerModel.currentOCHOrder!!.orderStartSite.siteName,
TaxiPassengerModel.currentOCHOrder!!.orderEndSite.siteName,
TaxiPassengerModel.currentOCHOrder!!.orderNo
TaxiPassengerModel.currentOCHOrder!!.orderNo,
TaxiPassengerModel.currentLineId
)
//startServicePilotDone()
}

View File

@@ -35,6 +35,8 @@ import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBea
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst.Companion.TaskType_DRIVE_TO_END
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst.Companion.TaskType_NONE
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst.Companion.TaskType_VIRTUAL
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum.Companion.valueOf
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager
@@ -154,13 +156,25 @@ object TaxiPassengerModel {
TaxiPassengerServiceManager.queryOrdersInAndWaitService(
object : OchCommonServiceCallback<TaxiPassengerOrdersInServiceQueryRespBean> {
override fun onSuccess(data: TaxiPassengerOrdersInServiceQueryRespBean) {
d(M_TAXI_P + TAG, "queryInAndWaitOrders data.data=${GsonUtils.toJson(data.data)}")
//目前后端将一个订单拆分成了多个任务,乘客屏只关心 送驾 类型的任务,这里过滤其他任务避免干扰
if (data.data.taskType != TaskType_DRIVE_TO_END) {
d(M_TAXI_P + TAG, "queryInAndWaitOrders data.taskType=${data.data.taskType}, discard data")
d(
M_TAXI_P + TAG,
"queryInAndWaitOrders data.data=${GsonUtils.toJson(data.data)}"
)
//目前后端将一个订单拆分成了多个任务,乘客屏只关心 送驾 类型的任务
//20230829 后端修改了逻辑在乘客屏startTask后taskType才会变成3
if (data.data.taskType == TaskType_NONE ||
data.data.taskType == TaskType_VIRTUAL
) {
d(
M_TAXI_P + TAG,
"queryInAndWaitOrders data.taskType=${data.data.taskType}, discard data"
)
// 如果上一个是 接驾或送驾任务 下一个是演练任务需要reset页面状态
currentOCHOrder = null
orderStatusChange()
if (currentOCHOrder != null) {
currentOCHOrder?.orderStatus = TaxiPassengerOrderStatusEnum.None.code
orderStatusChange()
currentOCHOrder = null
}
return
}
if (data.data?.order == null) {
@@ -176,11 +190,19 @@ object TaxiPassengerModel {
val currentOrder = data.data.order
currentLineId = data.data.lineId
currentTrajectoryInfo = data.data.trajectoryInfoByQuery
if (currentOCHOrder == null
|| currentOCHOrder?.orderStatus != currentOrder.orderStatus
) {
if (currentOCHOrder == null) {
currentOCHOrder = currentOrder
orderStatusChange()
} else if (currentOCHOrder?.orderStatus != currentOrder.orderStatus) {
if (currentOCHOrder?.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.code
&& currentOrder.orderStatus < TaxiPassengerOrderStatusEnum.UserArriveAtStart.code
) {
// 0830 UserArriveAtStart 状态是乘客屏本地在用户验证后本地设置,而且因为后端查询数据有延迟
// 这里过下过滤如果当前是UserArriveAtStart 且后端返回是之前状态,不更新数据
} else {
currentOCHOrder = currentOrder
orderStatusChange()
}
} else {
currentOCHOrder = currentOrder
}
@@ -205,14 +227,20 @@ object TaxiPassengerModel {
* 仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder
*/
private fun queryCurrentOrderStatus() {
d(M_TAXI_P + TAG, "queryCurrentOrderStatus: currentOCHOrder.orderNo=${currentOCHOrder?.orderNo}")
d(
M_TAXI_P + TAG,
"queryCurrentOrderStatus: currentOCHOrder.orderNo=${currentOCHOrder?.orderNo}"
)
currentOCHOrder?.orderNo?.let {
TaxiPassengerServiceManager.queryOrderById(
mContext!!,
it,
object : OchCommonServiceCallback<TaxiPassengerOrderQueryRespBean> {
override fun onSuccess(data: TaxiPassengerOrderQueryRespBean) {
d(M_TAXI_P + TAG, "queryCurrentOrderStatus: onSuccess data=${GsonUtils.toJson(data)}")
d(
M_TAXI_P + TAG,
"queryCurrentOrderStatus: onSuccess data=${GsonUtils.toJson(data)}"
)
if (data.data != null
&& currentOCHOrder != null
&& currentOCHOrder!!.orderNo == data.data.orderNo

View File

@@ -66,11 +66,20 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) :
order?.let {
setItineraryVisibility()
when (TaxiPassengerModel.curOrderStatus) {
TaxiPassengerOrderStatusEnum.OnTheWayToStart -> {
// 10 接驾中
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideArrivedEndLayout(isShow = false)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.ArriveAtStart -> {
// 20 司机到达上车点
mView?.showOrHideArrivedEndLayout(isShow = false)
mView?.showOrHidePressengerCheckPager(true)
mView?.showOrHideStartAutopilotView(isShow = false)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.UserArriveAtStart -> {
@@ -78,6 +87,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) :
mView?.showOrHideArrivedEndLayout(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideStartAutopilotView(isShow = true)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> {
@@ -102,6 +112,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) :
mView?.showOrHideArrivedEndLayout(false)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.Cancel -> {
// 70 取消订单
mView?.showOrHideStartAutopilotView(isShow = false)
@@ -109,6 +120,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) :
mView?.showOrHideArrivedEndLayout(isShow = false)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.None -> {
// 00 默认状态,在不同任务之间切换时使用
mView?.showOrHideStartAutopilotView(isShow = false)

View File

@@ -64,7 +64,8 @@ object TaxiPassengerAnalyticsManager {
* @param restart false点击'开始服务'启动)/true接管后点击'自动驾驶'按钮启动)
* @param send 是否直接发送埋点15s内开启成功则直接发送成功埋点
*/
fun triggerStartAutopilotEvent(restart: Boolean, send: Boolean, startName: String, endName: String, orderNo: String) {
fun triggerStartAutopilotEvent(restart: Boolean, send: Boolean, startName: String, endName: String,
orderNo: String, lineId: Long?) {
mStartAutopilotKey = if (restart) TaxiPassengerConst.EVENT_KEY_RESTART_AUTOPILOT else TaxiPassengerConst.EVENT_KEY_START_SERVICE
if (send) {
@@ -86,6 +87,7 @@ object TaxiPassengerAnalyticsManager {
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_START_NAME] = startName
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_END_NAME] = endName
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_ORDER_NUMBER] = orderNo
mStartAutopilotParams[TaxiPassengerConst.EVENT_PARAM_LINE_ID] = lineId ?: 0
startAutopiloTimeOut = RxUtils.createSubscribeOnOwnThread(TaxiPassengerConst.LOOP_PERIOD_15S) {
// 15s内未开启上报失败埋点
triggerStartAutopilotFailureEvent("", "15s后app等待超时")

View File

@@ -8,6 +8,15 @@
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
tools:ignore="MissingDefaultResource">
<com.mogo.och.common.module.wigets.DriverConnectStatusView
app:layout_constraintTop_toTopOf="@+id/vShowDebugView"
app:layout_constraintBottom_toBottomOf="@+id/gl_horizontal"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_381"
android:layout_width="@dimen/dp_41"
android:layout_height="@dimen/dp_41"/>
<!--Wifi状态-->
<com.mogo.eagle.core.function.hmi.ui.widget.WifiStateView
android:id="@+id/wifiStateView"

View File

@@ -215,7 +215,7 @@ ext {
btrace : "com.bytedance.btrace:rhea-core:2.0.0",
mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.6",
log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.9",
log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.12",
// 安全证书
passport_secret : "com.zhidaoauto:sdk-java:1.0.5-SNAPSHOT",

View File

@@ -87,8 +87,6 @@ dependencies {
implementation rootProject.ext.dependencies.androidxrecyclerview
implementation rootProject.ext.dependencies.flexbox
implementation rootProject.ext.dependencies.androidautoSize
implementation rootProject.ext.dependencies.koomnative
implementation rootProject.ext.dependencies.koomxhook
implementation rootProject.ext.dependencies.mofang_runtime
implementation rootProject.ext.dependencies.log_runtime
implementation group: "com.tencent.matrix", name: "matrix-android-lib", version: MATRIX_VERSION, changing: true

View File

@@ -45,7 +45,6 @@ import com.zhjt.mogo_core_function_devatools.block.*
import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl
import com.zhjt.mogo_core_function_devatools.koom.KoomInitTask
import com.zhjt.mogo_core_function_devatools.logcat.*
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager
import com.zhjt.mogo_core_function_devatools.lookaround.*
@@ -98,7 +97,6 @@ class DevaToolsProvider : IDevaToolsProvider {
//链路相关
traceManager.init(mContext!!)
if (DebugConfig.isDebug()) {
KoomInitTask.init(AbsMogoApplication.getApp())
initMatrix()
}
ttsManager.initTts(mContext!!) //todo 扶风 优化

View File

@@ -18,6 +18,7 @@ import com.mogo.eagle.core.function.api.map.deva.IMoGoMapDevaProvider
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapDevaListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
@@ -223,6 +224,7 @@ object MogoLogCatchManager : IMogoOnMessageListener<RemoteLogPushContent>, Handl
config.isShowDebugLog = true
config.isShowNetDebugLog = true
}
CallerMapUIServiceManager.getMapUIController()?.setDebugMode(true)
CallerAutoPilotControlManager.setEnableLog(true)
}
@@ -236,6 +238,7 @@ object MogoLogCatchManager : IMogoOnMessageListener<RemoteLogPushContent>, Handl
config.isShowDebugLog = false
config.isShowNetDebugLog = false
}
CallerMapUIServiceManager.getMapUIController()?.setDebugMode(false)
CallerAutoPilotControlManager.setEnableLog(false)
}

View File

@@ -10,6 +10,7 @@ import android.widget.LinearLayout
import com.mogo.eagle.core.function.api.devatools.mofang.*
import com.mogo.eagle.core.function.call.devatools.*
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.ToastUtils
import kotlinx.android.synthetic.main.view_blue_tooth.view.*
/**
@@ -26,6 +27,9 @@ open class BlueToothView: LinearLayout, IMoGoMoFangProvider.OnMoFangStatusListen
LayoutInflater.from(context).inflate(R.layout.view_blue_tooth
, this, true)
visibility = View.GONE
clipChildren = false
clipToPadding = false
}
companion object{
@@ -58,6 +62,21 @@ open class BlueToothView: LinearLayout, IMoGoMoFangProvider.OnMoFangStatusListen
if (it.visibility != View.VISIBLE) {
it.visibility = View.VISIBLE
}
val oldTextColor = it.currentTextColor
if (battery <= 30) {
if (oldTextColor != Color.RED) {
it.setTextColor(Color.RED)
ivMoFangStatus?.drawable?.setTint(Color.RED)
postDelayed({
ToastUtils.showShort("当前蘑方处理低电状态, 请及时充电")
}, 5000)
}
} else {
if (oldTextColor != Color.WHITE) {
it.setTextColor(Color.WHITE)
ivMoFangStatus?.drawable?.setTint(Color.WHITE)
}
}
it.text = "${battery}%"
}
}

View File

@@ -19,10 +19,13 @@
android:id="@+id/ivMoFangBattery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12dip"
android:textSize="25dip"
android:textStyle="bold"
android:textColor="@color/white"
android:layout_gravity="bottom"
android:visibility="gone"
android:layout_marginStart="-8dip"
android:layout_marginBottom="1dip"
tools:text="18%"/>
</merge>

View File

@@ -17,6 +17,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_RO
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_CHANGE_END
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_END
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_ERROR
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_READY_START
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_START
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST_DELAY
@@ -246,9 +247,17 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
0 -> {
MapBizTrace.log(
CHAIN_CODE_ROMA_REQUEST_OK,
CHAIN_CODE_ROMA_MAP_READY_START,
TAG,
mutableMapOf("romaStart" to "地图准备漫游动画")
)
}
4 -> {
MapBizTrace.log(
CHAIN_CODE_ROMA_MAP_READY_START,
CHAIN_CODE_ROMA_MAP_START,
TAG,
mutableMapOf("romaStart" to "地图开始漫游")
mutableMapOf("romaStart" to "地图漫游动画结束,开始漫游")
)
showAiCloud.set(true)
FunctionBuildConfig.isDrawIdentifyData = false

View File

@@ -31,7 +31,7 @@ fun TrafficLightStatus.turnRedAtOnce(): Boolean {
data class TrafficLightStatus(
val phaseNo: String, //相位编号
val color: String, //灯态: 红灯-R绿灯-G绿闪-FG黄-YB-黑
val remain: Int //倒计时-秒
val remain: Int //倒计时-秒 todo 云端string类型 如果返回 -- 解析异常
) {
}

View File

@@ -118,6 +118,7 @@ class ChainConstant {
const val CHAIN_CODE_ROMA_REQUEST_ERROR = "CHAIN_CODE_ROMA_REQUEST_ERROR"
const val CHAIN_CODE_ROMA_REQUEST_DELAY = "CHAIN_CODE_ROMA_REQUEST_DELAY"
const val CHAIN_CODE_ROMA_MODE_INVOKE = "CHAIN_CODE_ROMA_MODE_INVOKE"
const val CHAIN_CODE_ROMA_MAP_READY_START = "CHAIN_CODE_ROMA_MAP_READY_START"
const val CHAIN_CODE_ROMA_MAP_START = "CHAIN_CODE_ROMA_MAP_START"
const val CHAIN_CODE_ROMA_MAP_END = "CHAIN_CODE_ROMA_MAP_END"
const val CHAIN_CODE_ROMA_MAP_CHANGE_END = "CHAIN_CODE_ROMA_MAP_CHANGE_END"

View File

@@ -57,7 +57,8 @@ dependencies {
api 'org.greenrobot:eventbus:3.1.1'
api rootProject.ext.dependencies.androidautoSize
implementation rootProject.ext.dependencies.koomnative
implementation rootProject.ext.dependencies.koomxhook
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
api rootProject.ext.dependencies.mogoaicloudservicesdk
api rootProject.ext.dependencies.ttsbase

View File

@@ -10,6 +10,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.mogo.commons.crash.FinalizeCrashFixer;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.commons.koom.KoomInitTask;
import com.mogo.commons.screen.ScreenHelper;
import com.mogo.commons.module.MogoServices;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
@@ -43,6 +45,10 @@ public abstract class AbsMogoApplication extends Application {
super.onCreate();
AutoSize.checkAndInit(this);
ScreenHelper.setScreenConfig(this);
// 非主进程也需要初始化
if (DebugConfig.isDebug()) {
KoomInitTask.INSTANCE.init(AbsMogoApplication.getApp());
}
if (!shouldInit()) {
return;
}

View File

@@ -1,4 +1,4 @@
package com.zhjt.mogo_core_function_devatools.koom
package com.mogo.commons.koom
import android.app.Application
import android.os.Build
@@ -7,6 +7,7 @@ import com.kwai.koom.base.InitTask
import com.kwai.koom.base.MonitorManager
object KoomInitTask : InitTask {
override fun init(application: Application) {
val config = CommonConfig.Builder()
.setApplication(application) // Set application

View File

@@ -58,7 +58,7 @@ bytex.ASM_API=ASM7
################ 外部依赖引用 ################
# loglib
LOGLIB_VERSION=1.9.5-SNAPSHOT
LOGLIB_VERSION=1.9.6
######## MogoAiCloudSDK Version ########
# 网络请求LOGLIB_VERSION
MOGO_NETWORK_VERSION=1.4.7.16
@@ -80,7 +80,7 @@ MOGO_LOCATION_VERSION=1.4.7.16
MOGO_TELEMATIC_VERSION=1.4.7.16
######## MogoAiCloudSDK Version ########
# 自研地图
MAP_SDK_VERSION=2.14.3.4
MAP_SDK_VERSION=2.14.3.7
MAP_SDK_OPERATION_VERSION=1.1.4.1
# websocket
WEBSOCKET_VERSION=1.1.7

View File

@@ -720,6 +720,12 @@ public class AMapViewWrapper implements IMogoMapView,
public void onMapLoaded() {
CallerLogger.i(M_MAP + TAG, "autoop--onMapLoaded: ");
if (checkAMapView()) {
MapAutoViewHelper options = mMapView.getMapAutoViewHelper();
if (options != null) {
options.setScaleVRMode(true);
}else{
CallerLogger.i(M_MAP + TAG, "autoop--getMapAutoViewHelper is null");
}
CameraPosition cameraPosition = mMapView.getMapAutoViewHelper().getCameraPosition();
MogoMapListenerHandler.Companion.getMogoMapListenerHandler().onMapChanged(ObjectUtils.fromAMap(cameraPosition.getTarget()),
cameraPosition.getZoom(),