From 62fbe08b3bb54f716eb92ba8d453ced1934a6fbc Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 1 Mar 2023 16:55:57 +0800 Subject: [PATCH] =?UTF-8?q?[charter=20m1]=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E5=9F=8B=E7=82=B9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/charter/CharterAnalyticsManager.java | 146 ++++++++++++++++++ .../charter/bean/QueryCurrentOrderResponse.kt | 18 ++- .../och/charter/fragment/DriverM1Fragment.kt | 2 +- .../charter/model/DriverM1LooperManager.kt | 9 +- .../mogo/och/charter/model/DriverM1Model.kt | 72 ++++----- .../charter/presenter/DriverM1Presenter.kt | 2 +- .../res/layout/fragment_driver_m1.xml | 6 +- .../mogo/och/charter/constant/CharterConst.kt | 22 +-- 8 files changed, 212 insertions(+), 65 deletions(-) create mode 100644 OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterAnalyticsManager.java diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterAnalyticsManager.java b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterAnalyticsManager.java new file mode 100644 index 0000000000..79cc939b0c --- /dev/null +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/CharterAnalyticsManager.java @@ -0,0 +1,146 @@ +package com.magic.mogo.och.charter; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; + +import android.text.TextUtils; + +import com.magic.mogo.och.charter.constant.CharterConst; +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.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.DateTimeUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; + +import java.util.HashMap; + +/** + * @author: wangmingjun + * @date: 2023/3/1 + */ +public class CharterAnalyticsManager { + + private static final class SingletonHolder { + private static final CharterAnalyticsManager INSTANCE = new CharterAnalyticsManager(); + } + + public static CharterAnalyticsManager getInstance() { + return CharterAnalyticsManager.SingletonHolder.INSTANCE; + } + + private String mStartAutopilotKey; + private HashMap mStartAutopilotParams = new HashMap<>(); + + private Runnable startAutopilotRunnable = () -> { + // 15s内未开启,上报失败埋点 + triggerStartAutopilotFailureEvent("", "15s后app等待超时"); + }; + + public void triggerStartAutopilotFailureEventByAdas(String failCode, String failMsg){ + removeWaitingCallback(); + triggerStartAutopilotFailureEvent(failCode, failMsg); + } + + private void triggerStartAutopilotFailureEvent(String failCode, String failMsg){ + if (mStartAutopilotParams.isEmpty()) return; + + CallerLogger.INSTANCE.e( M_BUS + "triggerStartAutopilotFailureEvent", failMsg ); + + if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() != + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_START_FAILURE_CODE, failCode); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_START_FAILURE_MSG, failMsg); + } + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_START_RESULT + , CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() == + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING); + + MogoAnalyticUtils.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams); + + clearStartAutopilotParams();//清空参数数据,防止误传 + } + + private void removeWaitingCallback() { + if (startAutopilotRunnable != null && + UiThreadHandler.getsUiHandler().hasCallbacks(startAutopilotRunnable)) { + UiThreadHandler.removeCallbacks(startAutopilotRunnable); + } + } + + public void clearStartAutopilotFailureMSG(){ + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_START_FAILURE_CODE, ""); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_START_FAILURE_MSG, ""); + } + + private void clearStartAutopilotParams(){ + mStartAutopilotParams.clear(); + } + + /** + * 触发'开启自动驾驶'埋点流程 + * 开启自动驾驶,15s内成功则发送成功埋点,否则发送失败埋点 + * @param restart false(点击'滑动出发'启动)/true(接管后点击'自动驾驶'按钮启动) + * @param send 是否直接发送埋点(15s内开启成功则直接发送成功埋点) + */ + public void triggerStartAutopilotEvent( + boolean restart, boolean send, String startName, String endName, int lineId) { + mStartAutopilotKey = restart ? + CharterConst.EVENT_KEY_RESTART_AUTOPILOT : CharterConst.EVENT_KEY_START_SERVICE; + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); + String plateNum = AppConfigInfo.INSTANCE.getPlateNumber(); + String dateTime = DateTimeUtils.getTimeText( + System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss); + + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_SN, sn); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_ENV_ONLINE, + DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_TIME, dateTime); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_START_NAME, startName); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_END_NAME, endName); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_LINE_ID, lineId); + + if (send) { + if (mStartAutopilotParams.isEmpty()) return; + // 开启成功,上报埋点 + clearStartAutopilotFailureMSG(); + removeWaitingCallback(); + mStartAutopilotParams.put(CharterConst.EVENT_PARAM_START_RESULT, true); + MogoAnalyticUtils.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams); + + clearStartAutopilotParams();//清空参数数据,防止误传 + } else { + UiThreadHandler.postDelayed(startAutopilotRunnable, CharterConst.LOOP_PERIOD_15S); + } + } + + /** + * 触发"无法开启自驾已知异常"埋点 + * @param startName + * @param endName + * @param lineId + */ + public void triggerUnableStartAPReasonEvent(String startName, String endName, int lineId, + String reason) { + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); + String plateNum = AppConfigInfo.INSTANCE.getPlateNumber(); + String dateTime = DateTimeUtils.getTimeText( + System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss); + + HashMap params = new HashMap<>(); + + params.put(CharterConst.EVENT_PARAM_SN, sn); + params.put(CharterConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum); + params.put(CharterConst.EVENT_PARAM_ENV_ONLINE, + DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false); + params.put(CharterConst.EVENT_PARAM_TIME, dateTime); + params.put(CharterConst.EVENT_PARAM_START_NAME, startName); + params.put(CharterConst.EVENT_PARAM_END_NAME, endName); + params.put(CharterConst.EVENT_PARAM_LINE_ID, lineId); + params.put(CharterConst.EVENT_PARAM_UNABLE_START_REASON, reason); + MogoAnalyticUtils.INSTANCE.track(CharterConst.EVENT_KEY_AP_UNABLE_START_REASON, params); + } +} diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt index 92955a1bef..7a31d03450 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt @@ -22,6 +22,22 @@ data class QueryCurrentOrderResponse(var data: Result):BaseData(){ //线路id , var startTime: Long, var endTime: Long, var passengerPhone: String - ) + ){ + override fun equals(o: Any?): Boolean { + if (this === o) return true + if (o == null || javaClass != o.javaClass) return false + val result = o as Result + return orderNo == result.orderNo + && sn == result.sn + && lineId == result.lineId + && startSiteId == result.startSiteId + && startSiteName == result.startSiteName + && siteId == result.siteId + && siteName == result.siteName + && wgs84Lon == result.wgs84Lon + && wgs84Lon == result.wgs84Lon + && passengerPhone == result.passengerPhone + } + } } diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt index e19618b23b..dc732edb94 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt @@ -154,8 +154,8 @@ class DriverM1Fragment : CharterBaseFragment=1 代表是重试 每次到站/路线结束清空置为0 @@ -112,8 +112,8 @@ class DriverM1Model { }) - fun init() { - mContext = AbsMogoApplication.getApp() + fun init(context: Context) { + mContext = context // 定位监听 CallerChassisLocationGCJ02ListenerManager.addListener(TAG, mMapLocationListener) CallerChassisLocationGCJ02ListenerManager.setListenerHz(TAG,2) @@ -295,6 +295,7 @@ class DriverM1Model { pushOperationalToMsgBox(obj.pushTimeStamp, obj.message ,OCHSocketMessageManager.OPERATION_ORDER_TYPE) sendMsgToClient(DPOrderClosedMsg()) + queryCurrentServiceStatus() } override fun target(): Class { @@ -395,7 +396,7 @@ class DriverM1Model { triggerUnableStartAPReasonEvent() return } - triggerStartServiceEvent(true, false) + triggerStartServiceEvent(false, false) val parameters = initAutopilotControlParameters() if (null == parameters) { d(SceneConstant.M_CHARTER_D + TAG, "行程日志-AutopilotControlParameters is empty.") @@ -429,7 +430,7 @@ class DriverM1Model { } fun isHaveOrder(): Boolean { - return mCurrentOrder == null + return mCurrentOrder != null } // 登出 @@ -437,28 +438,28 @@ class DriverM1Model { loginService!!.loginOut(mLatitude, mLongitude) } - fun triggerStartServiceEvent(isRestart: Boolean, send: Boolean) { -// if (stationList == null || backgroundCurrentStationIndex >= stationList.size - 1) { -// return -// } -// val currentStation: BusStationBean = stationList[backgroundCurrentStationIndex] -// val nextStation: BusStationBean = stationList[backgroundCurrentStationIndex + 1] -// BusAnalyticsManager.getInstance().triggerStartAutopilotEvent( -// isRestart, send, -// currentStation.getName(), nextStation.getName(), currentLineId -// ) + private fun triggerStartServiceEvent(isRestart: Boolean, send: Boolean) { + if (mCurrentOrder == null) { + return + } + mCurrentOrder?.lineId?.let { + CharterAnalyticsManager.getInstance().triggerStartAutopilotEvent( + isRestart, send, + mCurrentOrder?.startSiteName, mCurrentOrder?.siteName, it + ) + } } - fun triggerUnableStartAPReasonEvent() { -// if (stationList == null || backgroundCurrentStationIndex >= stationList.size - 1) { -// return -// } -// val currentStation: BusStationBean = stationList[backgroundCurrentStationIndex] -// val nextStation: BusStationBean = stationList[backgroundCurrentStationIndex + 1] -// BusAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( -// currentStation.getName(), nextStation.getName(), currentLineId, -// OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason -// ) + private fun triggerUnableStartAPReasonEvent() { + if (mCurrentOrder == null) { + return + } + mCurrentOrder?.lineId?.let { + CharterAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( + mCurrentOrder?.startSiteName, mCurrentOrder?.siteName, it, + OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason + ) + } } fun getCurrentStationIndex(): Int { @@ -485,7 +486,7 @@ class DriverM1Model { } private fun initAutopilotControlParameters(): AutopilotControlParameters? { - if ( mCurrentOrder == null || mCurrentResult == null) return null + if ( mCurrentOrder == null || mCurrentRoute == null) return null var parameters = AutopilotControlParameters() parameters.routeID = mCurrentOrder?.lineId!! parameters.routeName = mCurrentOrder?.lineName!! @@ -501,12 +502,12 @@ class DriverM1Model { if (parameters.autoPilotLine == null) { parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( mCurrentOrder!!.lineId.toLong(), - mCurrentResult!!.csvFileUrl, mCurrentResult!!.csvFileMd5, - mCurrentResult!!.txtFileUrl, mCurrentResult!!.txtFileMd5, - mCurrentResult!!.contrailSaveTime, mCurrentResult!!.carModel, - mCurrentResult!!.csvFileUrlDPQP, mCurrentResult!!.csvFileMd5DPQP, - mCurrentResult!!.txtFileUrlDPQP, mCurrentResult!!.txtFileMd5DPQP, - mCurrentResult!!.contrailSaveTimeDPQP!! + mCurrentRoute!!.csvFileUrl, mCurrentRoute!!.csvFileMd5, + mCurrentRoute!!.txtFileUrl, mCurrentRoute!!.txtFileMd5, + mCurrentRoute!!.contrailSaveTime, mCurrentRoute!!.carModel, + mCurrentRoute!!.csvFileUrlDPQP, mCurrentRoute!!.csvFileMd5DPQP, + mCurrentRoute!!.txtFileUrlDPQP, mCurrentRoute!!.txtFileMd5DPQP, + mCurrentRoute!!.contrailSaveTimeDPQP!! ) } return parameters @@ -587,10 +588,11 @@ class DriverM1Model { DriverM1ServiceManager.queryCurrentOrder(mContext ,object: OchCommonServiceCallback{ override fun onSuccess(data: QueryCurrentOrderResponse?) { - if (data == null || data.code != 0 || mCurrentOrder === data.data){ + if (data == null || data.code != 0 || data.data.equals(mCurrentOrder)){ isArrivedStation = false return } + d(SceneConstant.M_CHARTER_D + TAG, "queryCurrentOrder order =" + GsonUtils.toJson(data.data)) mCurrentOrder = data.data @@ -672,7 +674,7 @@ class DriverM1Model { if (data == null || data.code != 0) return d(SceneConstant.M_CHARTER_D + TAG, "checkoutContrail-==" + GsonUtils.toJson(data.data)) - mCurrentResult = data.data + mCurrentRoute = data.data } override fun onFail(code: Int, msg: String?) { diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt index 3be5cf11ad..2ab69ed419 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt @@ -35,7 +35,7 @@ class DriverM1Presenter(view: DriverM1Fragment?) : private var mCurrentAutopilotStatus : Int = -1 init { - DriverM1Model.get().init() + DriverM1Model.get().init(context) registerListener() } diff --git a/OCH/mogo-och-charter/src/driverm1/res/layout/fragment_driver_m1.xml b/OCH/mogo-och-charter/src/driverm1/res/layout/fragment_driver_m1.xml index dc40998949..9a7e9c2293 100644 --- a/OCH/mogo-och-charter/src/driverm1/res/layout/fragment_driver_m1.xml +++ b/OCH/mogo-och-charter/src/driverm1/res/layout/fragment_driver_m1.xml @@ -146,13 +146,13 @@ @@ -198,7 +198,7 @@ android:id="@+id/group_stations_panel" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:visibility="gone" + android:visibility="visible" app:constraint_referenced_ids="driverm1_line_name,driverm1_order_count_down ,cur_station_title,cur_station_title1,line1,line2,driverm1StationName1Tv, driverm1StationName2Tv,driverm1nextCircleIv,driverm1CircleIvBg,driverm1ArrowBg diff --git a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/constant/CharterConst.kt b/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/constant/CharterConst.kt index cc3137bb8f..6c86a3c865 100644 --- a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/constant/CharterConst.kt +++ b/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/constant/CharterConst.kt @@ -9,17 +9,6 @@ class CharterConst { // OCH arouter 路由path const val PATH = "/driver/api" - // 测试用的广播 - const val BROADCAST_TEST_BUS_CONTROL_TYPE_EXTRA_KEY = "sceneType" - // 无状态 - const val STATION_STATUS_IDLE = 0 - // 已过站(历史站) - const val STATION_STATUS_LEAVING = 1 - // 到站(当前站) - const val STATION_STATUS_STOPPED = 2 - // 未到站(未到站) - const val STATION_STATUS_ARRIVING = 3 - // 上报心跳轮询ms const val LOOP_PERIOD_60S = 60 * 1000L // 开始服务启动自动驾驶等待时间(埋点上传) @@ -32,15 +21,10 @@ class CharterConst { // 尝试下发给MEC轨迹最多10次 const val LOOP_SEND_TRAJ_TIMES = 10 - //起点UUID - const val BUS_START_MAP_MAKER = "bus_start_map_maker"; - //终点UUID - const val BUS_END_MAP_MAKER = "bus_end_map_maker"; - // 埋点key:接管后点击'自动驾驶'按钮启动 - const val EVENT_KEY_RESTART_AUTOPILOT = "event_key_och_bus_restart_autopilot" + const val EVENT_KEY_RESTART_AUTOPILOT = "event_key_och_charter_restart_autopilot" // 埋点key:开始服务开启自动驾驶(成功/失败) - const val EVENT_KEY_START_SERVICE = "event_key_och_bus_start_service" + const val EVENT_KEY_START_SERVICE = "event_key_och_charter_start_service" const val EVENT_PARAM_SN = "sn" const val EVENT_PARAM_TIME = "time" const val EVENT_PARAM_START_NAME = "start_name" @@ -52,7 +36,7 @@ class CharterConst { const val EVENT_PARAM_PLATE_NUM = "plate_number" // 车牌号 const val EVENT_PARAM_ENV_ONLINE = "env_online" // 是否线上环境:true/false // 埋点key:开启自动驾驶前已识别的异常,会导致无法开启自驾 - const val EVENT_KEY_AP_UNABLE_START_REASON = "event_key_och_bus_ap_unable_start_reason" + const val EVENT_KEY_AP_UNABLE_START_REASON = "event_key_och_charter_ap_unable_start_reason" const val EVENT_PARAM_UNABLE_START_REASON = "unable_start_reason"; /**