diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.kt b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.kt index 9cf1ac7f31..599b5bdfbc 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.kt +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.kt @@ -193,42 +193,46 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( d(SceneConstant.M_TAXI + TAG, "没有点") return } - texIndexList.clear() - val allPoints = ArrayList(routeArrived) - for (i in routeArrived.indices) { - if (routeArrived.size > 1 && i < routeArrived.size - 1) { - texIndexList.add(0) + try { + texIndexList.clear() + val allPoints = ArrayList(routeArrived) + for (i in routeArrived.indices) { + if (routeArrived.size > 1 && i < routeArrived.size - 1) { + texIndexList.add(0) + } + } + texIndexList.add(0) + location?.let { + allPoints.add(LatLng(it.latitude, it.longitude)) + } + allPoints.addAll(routeArriving) + for (ignored in routeArrived) { + texIndexList.add(1) + } + mPolyline?.let { + it.points = allPoints + it.options.customTextureIndex = texIndexList + return + } + if(textureList.isEmpty()) { + textureList.add(mArrivedRes) + textureList.add(mUnArrivedRes) + } + //设置线段纹理 + val polylineOptions = PolylineOptions().apply { + addAll(allPoints) + isUseTexture = true + width(15f) + lineCapType(PolylineOptions.LineCapType.LineCapRound) + customTextureList = textureList + customTextureIndex = texIndexList } - } - texIndexList.add(0) - location?.let { - allPoints.add(LatLng(it.latitude, it.longitude)) - } - allPoints.addAll(routeArriving) - for (ignored in routeArrived) { - texIndexList.add(1) - } - mPolyline?.let { - it.points = allPoints - it.options.customTextureIndex = texIndexList - return - } - if(textureList.isEmpty()) { - textureList.add(mArrivedRes) - textureList.add(mUnArrivedRes) - } - //设置线段纹理 - val polylineOptions = PolylineOptions().apply { - addAll(allPoints) - isUseTexture = true - width(15f) - lineCapType(PolylineOptions.LineCapType.LineCapRound) - customTextureList = textureList - customTextureIndex = texIndexList - } - // 绘制线 - mPolyline = mAMap.addPolyline(polylineOptions) + // 绘制线 + mPolyline = mAMap.addPolyline(polylineOptions) + } catch (e: Exception) { + e.printStackTrace() + } } override fun clearPolyline() { diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/SiteInfoResponse.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/SiteInfoResponse.kt index 51e39a0a2d..1498c49eb1 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/SiteInfoResponse.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/bean/response/SiteInfoResponse.kt @@ -17,6 +17,7 @@ data class SiteInfoResponse(val data: List?) : BaseData(){ val Wgs84Lat: Double?,//高精坐标 val GcjLon: Double?,//高德坐标 val GcjLat: Double?,//高德坐标 + val introduction: String?,//站点介绍 val seq: Double?, val type: Int?, var isNear:Boolean=false, diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/constant/CharterPassengerConst.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/constant/CharterPassengerConst.kt index 749964b9f5..686e4af11d 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/constant/CharterPassengerConst.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/constant/CharterPassengerConst.kt @@ -23,7 +23,8 @@ class CharterPassengerConst { // 到达起始点围栏 const val ARRIVE_AT_START_STATION_DISTANCE = 15 //围栏由20m改为50m 再次改为15m - const val ARRIVE_SOON_AT_START_STATION_DISTANCE = 100 //100米提示 + const val ARRIVE_SOON_AT_START_STATION_DISTANCE = 50 //100米提示 + const val ARRIVE_DISTANCE_4_STATION_INTRODUCE = 200 //站点介绍 const val MIN_DISTANCE_STATION = 30 //站点选择小于30m 不能选 } 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 db603f25a4..bf06c1f154 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 @@ -111,7 +111,8 @@ object CharterPassengerModel { // 到站仅一次 private val endKey = "arrivedLine" private val endKeyRequestIng = "arrivedLineRequestIng" - private val ending100Key = "arrivingLine" + private val ending50Key = "arrivingLine" + private val ending200Key = "palyStationInfo" private val min5Speak = "min5Speak" private var carTypeChageListener: IOrderChangeCallback? = null @@ -421,9 +422,13 @@ object CharterPassengerModel { checkArriveDesk(currentInfo) } if (calculateLineDistance < CharterPassengerConst.ARRIVE_SOON_AT_START_STATION_DISTANCE && calculateLineDistance > 0) { - d(M_BUS_P + TAG, "小于100米到站") + d(M_BUS_P + TAG, "小于50米到站") arriveDestSoon() } + if (calculateLineDistance < CharterPassengerConst.ARRIVE_DISTANCE_4_STATION_INTRODUCE && calculateLineDistance > 0) { + d(M_BUS_P + TAG, "小于200米到站") + playSiteInfomation() + } } } // 启动时间校准 @@ -448,7 +453,8 @@ object CharterPassengerModel { GcjLat = null, GcjLon = null, seq = null, - type = null + type = null, + introduction = "简介" ) return Pair(lineInfo, targetSizt) } @@ -713,8 +719,14 @@ object CharterPassengerModel { M_BUS_P + "calculateDistance", "最终信息:lastSumLength: ${lastSumLength}lastTime : $lastTime thread = ${Thread.currentThread().name}" ) + + if (lastSumLength < CharterPassengerConst.ARRIVE_DISTANCE_4_STATION_INTRODUCE && lastSumLength > 0) { + d(M_BUS_P + TAG, "小于200米到站") + playSiteInfomation() + } + if (lastSumLength < CharterPassengerConst.ARRIVE_SOON_AT_START_STATION_DISTANCE && lastSumLength > 0) { - d(M_BUS_P + TAG, "小于100米到站2") + d(M_BUS_P + TAG, "小于50米到站2") arriveDestSoon() } if (lastSumLength < CharterPassengerConst.ARRIVE_AT_START_STATION_DISTANCE && lastSumLength > 0) { @@ -1018,16 +1030,65 @@ object CharterPassengerModel { return Triple(null, null, null) } + @Synchronized + fun playSiteInfomation() { + orderInfo?.let { order -> + order.lineId?.let { lineId -> + order.siteId?.let { siteId -> + if (order.arriveStatus == OrderInfoResponse.ARRIVING) { + if (isSuccess("${siteId}$ending200Key")) { + broadcastList["${siteId}$ending50Key"] = true + getSiteInfo2Play(lineId,siteId,1) + } + } + } + } + } + } + + private fun getSiteInfo2Play(lineId: Long, siteId: Long, size: Int) { + if(size>3){ + return + } + BusPassengerServiceManager.queryLineSiteList(mContext,"$lineId",object :OchCommonServiceCallback{ + override fun onSuccess(data: SiteInfoResponse?) { + data?.data?.forEach { + if (it.siteId==siteId) { + if (!StringUtils.isEmpty(it.introduction)) { + VoiceNotice.showNotice(it.introduction) + } + return + } + } + } + + override fun onFail(code: Int, msg: String?) { + getSiteInfo2Play(lineId,siteId,size+1) + } + + override fun onError() { + super.onError() + getSiteInfo2Play(lineId,siteId,size+1) + } + + override fun onError(msg: String?) { + super.onError(msg) + getSiteInfo2Play(lineId,siteId,size+1) + } + + }) + } + @Synchronized fun arriveDestSoon() { orderInfo?.let { order -> order.siteId?.let { siteId -> if (order.arriveStatus == OrderInfoResponse.ARRIVING) { - if (isSuccess("${siteId}$ending100Key")) { + if (isSuccess("${siteId}$ending50Key")) { val string = mContext.getString(R.string.charter_p_arrived_station_left_100, order.siteName) VoiceNotice.showNotice(string) - broadcastList["${siteId}$ending100Key"] = true + broadcastList["${siteId}$ending50Key"] = true } } } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt index 7e6fae56b7..2fd138c7a3 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt @@ -163,12 +163,8 @@ class MainFragment : MvpFragment(), IMogo } aciv_map_2_default.setOnClickListener { omvOverMap.displayCustomOverView() - val controller = getMapUIController() - if (controller != null) { - //切换到地图中间 - controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null) - // 切换缩放到中视角 - controller.changeZoom2(0.8f) + mapBizView.getUI()?.let { + it.changeMapVisualAngle(it.getVrAngleDefaultMode(), null) } } MogoMapListenerHandler.mogoMapListenerHandler.registerHostMapListener(TAG, this) diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/GoViewWithArrive.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/GoViewWithArrive.kt index 1721193e9b..f1132bef75 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/GoViewWithArrive.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/GoViewWithArrive.kt @@ -91,10 +91,10 @@ class GoViewWithArrive @JvmOverloads constructor( IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { // 重新起步 StopSideManager.resetStopSide() - CharterPassengerModel.leaveStation() + ToastCharterUtils.showToastShort("车辆行驶中,不要频繁点击哦~") } IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> { - ToastCharterUtils.showToastShort("安全守护中,无需操作~") + ToastCharterUtils.showToastShort("车辆行驶中,不要频繁点击哦~") } else -> {} } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/lockview/LockManager.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/lockview/LockManager.kt index 8bdc7da105..b83d34ad49 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/lockview/LockManager.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/lockview/LockManager.kt @@ -52,7 +52,7 @@ object LockManager { fun reStartCountDown(){ CallerLogger.d(TAG,"重置时间") handler?.removeMessages(1) - handler?.sendEmptyMessageDelayed(1,120_000) + handler?.sendEmptyMessageDelayed(1,60_000) } @Synchronized diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/map/BizMapView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/map/BizMapView.kt new file mode 100644 index 0000000000..581c3dbec5 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/map/BizMapView.kt @@ -0,0 +1,57 @@ +package com.mogo.och.charter.passenger.ui.map + +import android.content.Context +import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.MotionEvent +import android.widget.FrameLayout +import com.mogo.eagle.core.function.view.MapBizView +import com.mogo.map.uicontroller.IMogoMapUIController + +import com.mogo.och.charter.passenger.R + +class BizMapView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : FrameLayout(context, attrs, defStyleAttr) { + + private lateinit var mapBizView: MapBizView + + init { + LayoutInflater.from(context).inflate(R.layout.charter_p_bizmap, this, true) + mapBizView = findViewById(R.id.bizMapView) + } + + override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { + return true + } + + fun getUI(): IMogoMapUIController? { + return mapBizView.getUI() + } + + fun onCreate(bundle: Bundle?) { + mapBizView.onCreate(bundle) + } + fun onResume() { + mapBizView.onResume() + } + + fun onSaveInstanceState(outState: Bundle){ + mapBizView.onSaveInstanceState(outState) + } + + fun onLowMemory() { + mapBizView.onLowMemory() + } + + fun onPause() { + mapBizView.onPause() + } + + fun onDestroy() { + mapBizView.onDestroy() + } +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlView.kt index d7fe05aea2..0ebb6c440b 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlView.kt @@ -383,11 +383,11 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba override fun setLightTop1View(leftLight: Boolean, isFirst: Boolean) { tv_light_top_01?.let { if (leftLight) { - tv_light_top_01.text = context.getString(R.string.charter_p_close_light1) + tv_light_top_01.text = context.getString(R.string.charter_p_open_light1) tv_light_top_01.isChecked = true if (!isFirst) ToastCharterUtils.showToastShort("打开顶灯1") } else { - tv_light_top_01.text = context.getString(R.string.charter_p_open_light1) + tv_light_top_01.text = context.getString(R.string.charter_p_close_light1) tv_light_top_01.isChecked = false if (!isFirst) ToastCharterUtils.showToastShort("关闭顶灯1") } @@ -397,11 +397,11 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba override fun setLightTop2View(rightLight: Boolean, isFirst: Boolean) { tv_light_top_02?.let { if (rightLight) { - tv_light_top_02.text = context.getString(R.string.charter_p__close_light2) + tv_light_top_02.text = context.getString(R.string.charter_p_open_light2) tv_light_top_02.isChecked = true if (!isFirst) ToastCharterUtils.showToastShort("打开顶灯2") } else { - tv_light_top_02.text = context.getString(R.string.charter_p_open_light2) + tv_light_top_02.text = context.getString(R.string.charter_p__close_light2) tv_light_top_02.isChecked = false if (!isFirst) ToastCharterUtils.showToastShort("关闭顶灯2") } @@ -411,12 +411,12 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba override fun setLightAtmosphereView(atmosphereLight: Boolean, isFirst: Boolean) { tv_light_atmosphere?.let { if (atmosphereLight) { - tv_light_atmosphere.text = context.getString(R.string.charter_p_close_atmosphere) + tv_light_atmosphere.text = context.getString(R.string.charter_p_open_atmosphere) tv_light_atmosphere.isChecked = true iv_bottom_light_setting.setImageResource(R.drawable.charter_p_function_atmosphere_select) if (!isFirst) ToastCharterUtils.showToastShort("打开氛围灯") } else { - tv_light_atmosphere.text = context.getString(R.string.charter_p_open_atmosphere) + tv_light_atmosphere.text = context.getString(R.string.charter_p_close_atmosphere) tv_light_atmosphere.isChecked = false iv_bottom_light_setting.setImageResource(R.drawable.charter_p_function_atmosphere_nor) if (!isFirst) ToastCharterUtils.showToastShort("关闭氛围灯") diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_bizmap.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_bizmap.xml new file mode 100644 index 0000000000..b6ba701a93 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_bizmap.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml index 43dcded38a..78b70a8c53 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml @@ -4,13 +4,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - 高 - 关闭顶灯1 - 关闭顶灯2 - 关闭氛围灯 + 开启顶灯1 + 开启顶灯2 + 开启氛围灯 - 开启顶灯1 - 开启顶灯2 - 开启氛围灯 + 关闭顶灯1 + 关闭顶灯2 + 关闭氛围灯 KM/h diff --git a/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java b/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java index 12fac3ad93..f03c54ef1f 100644 --- a/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java +++ b/OCH/common/data/src/main/java/com/mogo/och/data/bean/BusStationBean.java @@ -18,6 +18,8 @@ public class BusStationBean { private double lat; //高精坐标 private int drivingStatus;//行驶信息,0初始值;1已经过;2当前站;3未到站 private boolean leaving; + private String introduction;// 站点简介 + private boolean isPlayTts; public String getNameKr() { return nameKr; @@ -95,6 +97,22 @@ public class BusStationBean { this.leaving = leaving; } + public String getIntroduction() { + return introduction; + } + + public void setIntroduction(String introduction) { + this.introduction = introduction; + } + + public boolean isPlayTts() { + return isPlayTts; + } + + public void setPlayTts(boolean playTts) { + isPlayTts = playTts; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/bean/WriteOffCountResponse.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/bean/WriteOffCountResponse.java new file mode 100644 index 0000000000..c34204a1b1 --- /dev/null +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/bean/WriteOffCountResponse.java @@ -0,0 +1,15 @@ +package com.mogo.och.bus.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2022/2/9 + */ +public class WriteOffCountResponse extends BaseData { + + public Integer data; + +} diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java index e10afc44e7..8e4528feba 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java @@ -8,8 +8,6 @@ import com.mogo.eagle.core.data.map.MogoLocation; * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) */ public interface IBusControllerStatusCallback { - // 是否vr map模式 - void onVRModeChanged(boolean isVRMode); // 自车定位 void onCarLocationChanged(MogoLocation location); //开始开启自动驾驶 diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/callback/IPassengerCallback.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/callback/IPassengerCallback.java deleted file mode 100644 index 98f4498282..0000000000 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/callback/IPassengerCallback.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mogo.och.bus.callback; - -import com.mogo.och.bus.bean.WriteOffPassenger; - -/** - * @author: wangmingjun - * @date: 2022/9/26 - */ -public interface IPassengerCallback { - void playPassenger(WriteOffPassenger passenger); -} diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java index 4fcd04f64e..db0d3ff439 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java @@ -464,17 +464,6 @@ public class BusFragment extends BaseBusTabFragment smallMapView.clearPolyline(); } - /** - * VR模式切换 - * - * @param isVRMode - */ - public void onVRModeChanged(boolean isVRMode) { - if (mRootView != null) { - mRootView.setVisibility(isVRMode ? View.VISIBLE : View.GONE); - } - } - /** * 绘制地图起点终点 * diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java index 6d87cef3d3..eb933f8241 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java @@ -6,28 +6,17 @@ import static com.mogo.och.bus.constant.BusConst.STATION_STATUS_ARRIVING; import static com.mogo.och.bus.constant.BusConst.STATION_STATUS_STOPPED; import android.content.Context; -import android.os.Handler; -import android.os.Message; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; -import com.amap.api.maps.model.LatLng; import com.elegant.network.utils.GsonUtil; import com.mogo.aicloud.services.socket.IMogoOnMessageListener; -import com.mogo.eagle.core.data.enums.EventTypeEnumNew; -import com.mogo.eagle.core.data.msgbox.MsgBoxBean; -import com.mogo.eagle.core.data.msgbox.MsgBoxType; -import com.mogo.eagle.core.data.msgbox.V2XMsg; import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener; -import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager; import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager; import com.mogo.eagle.core.utilcode.util.CoordinateUtils; import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.module.status.IMogoStatusChangedListener; -import com.mogo.commons.module.status.MogoStatusManager; -import com.mogo.commons.module.status.StatusDescriptor; import com.mogo.eagle.core.data.BaseData; import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; import com.mogo.eagle.core.data.config.FunctionBuildConfig; @@ -38,19 +27,15 @@ import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg; import com.mogo.och.common.module.bean.dpmsg.DPMsgType; import com.mogo.och.common.module.bean.dpmsg.LoginCacheStatus; import com.mogo.och.common.module.bean.dpmsg.TaskDetailsMsg; -import com.mogo.och.common.module.bean.dpmsg.WriteOffDevicesMsg; -import com.mogo.och.common.module.bean.dpmsg.WriteOffMsg; import com.mogo.och.common.module.biz.constant.LoginStatusManager; import com.mogo.och.data.bean.BusStationBean; import com.mogo.och.common.module.biz.common.socketmessage.data.SystemMsg; import com.mogo.och.common.module.biz.constant.OchCommonConst; 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.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.CallerChassisLocationGCJ02ListenerManager; -import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager; 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.GsonUtils; @@ -58,12 +43,9 @@ import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.R; -import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; import com.mogo.och.data.bean.BusRoutesResult; -import com.mogo.och.bus.bean.WriteOffPassenger; import com.mogo.och.bus.callback.IBusADASStatusCallback; import com.mogo.och.bus.callback.IBusControllerStatusCallback; -import com.mogo.och.bus.callback.IPassengerCallback; import com.mogo.och.bus.callback.IRefreshBusStationsCallback; import com.mogo.och.bus.callback.ISlidePannelHideCallback; import com.mogo.och.bus.constant.BusConst; @@ -77,7 +59,6 @@ import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager; import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager; -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.utils.PinYinUtil; @@ -106,13 +87,8 @@ import mogo.telematics.pad.MessagePad; */ public class OrderModel { private final String TAG = OrderModel.class.getSimpleName(); - private int currentLineId = -1; - private int currentTaskId = -1; private int backgroundCurrentStationIndex = 0;//A->B 此处值是A站点索引 - private static volatile OrderModel sInstance; - public double mLongitude = 0; - public double mLatitude = 0; private Context mContext; private final List stationList = new ArrayList<>(); private BusRoutesResult busRoutesResult = null; @@ -122,17 +98,12 @@ public class OrderModel { private boolean isGoingToNextStation = false; // 运营类型 private static final int VEHICLE_TYPE = 10; - private static final int MSG_QUERY_BUS_STATION = 1001; - private static final long QUERY_BUS_STATION_DELAY = 5000; private IRefreshBusStationsCallback refreshBusStationsCallback; private ISlidePannelHideCallback slidePanelHideCallback; private IBusControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 - private IPassengerCallback mPassengerCallback; //乘客核销回调 private IBusADASStatusCallback mADASStatusCallback; - List points = new ArrayList<>();//全路径信息 - private volatile boolean isArrivedStation = false; //0: 代表没有启动过 1代表是启动第一次,当>=1 代表是重试 每次到站/路线结束清空置为0 @@ -140,17 +111,6 @@ public class OrderModel { private LoginService loginService; - private final Handler handler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { - if (msg.what == MSG_QUERY_BUS_STATION) { - queryBusRoutes(); - return true; - } - return false; - } - }); - public static OrderModel getInstance() { if (sInstance == null) { synchronized (OrderModel.class) { @@ -172,11 +132,6 @@ public class OrderModel { // 定位监听 CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,10,mMapLocationListener); - MogoStatusManager.getInstance().registerStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); - - //自动驾驶路线规划接口 - CallerPlanningRottingListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener); - //开启自驾后 异常信息返回 OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener); @@ -184,9 +139,6 @@ public class OrderModel { OCHSocketMessageManager.msgMonitorType, mMogoOnMessageListener); -// OCHSocketMessageManager.INSTANCE.registerSocketMessageListener(//监听核销乘客 -// OCHSocketMessageManager.msgWriteOffPassengerType, -// mWriteOffPassengeOnMessageListener); TicketModel.INSTANCE.load(); AbnormalFactorsLoopManager.INSTANCE.startLoopAbnormalFactors(mContext); @@ -289,24 +241,6 @@ public class OrderModel { } }; -// private final IMogoOnMessageListener mWriteOffPassengeOnMessageListener = -// new IMogoOnMessageListener() { -// @Override -// public Class target() { -// return WriteOffPassenger.class; -// } -// -// @Override -// public void onMsgReceived(WriteOffPassenger passenger) { -// //进行播报 -// CallerLogger.i(M_BUS + TAG,"passenger = "+ GsonUtil.jsonFromObject(passenger)); -// if (passenger != null && passenger.passengerSize == 0) return; -// if (mPassengerCallback != null){ -// mPassengerCallback.playPassenger(passenger); -// } -// } -// }; - public void setAdasStatusCallback(IBusADASStatusCallback callback){ this.mADASStatusCallback = callback; } @@ -315,10 +249,6 @@ public class OrderModel { this.refreshBusStationsCallback = callback; } - public void setPassengerCallback(IPassengerCallback callback) { - this.mPassengerCallback = callback; - } - public void setSlidePanelHideCallback(ISlidePannelHideCallback callback) { this.slidePanelHideCallback = callback; } @@ -327,44 +257,11 @@ public class OrderModel { this.mControllerStatusCallback = callback; } - private final IMoGoPlanningRottingListener moGoAutopilotPlanningListener = new IMoGoPlanningRottingListener() { - - @Override - public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) { - if (null != routeList && routeList.getWayPointsList().size() > 0) { - points.clear(); - points.addAll(coordinateConverterWgsToGcjList(mContext, routeList.getWayPointsList())); - } - } - - }; - - public static List coordinateConverterWgsToGcjList(Context mContext, List mogoLatLngList) { - List points = new ArrayList<>(); - for (MessagePad.Location m : mogoLatLngList) { - LatLng mogoLatLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(mContext, m); - BusRoutePlanningUpdateReqBean.Result result = new BusRoutePlanningUpdateReqBean.Result(); - result.latitude = mogoLatLng.latitude; - result.longitude = mogoLatLng.longitude; - points.add(result); - } - return points; - } - - public void debugUpdateOrderRoute(List list) { - points.clear(); - points.addAll(coordinateConverterWgsToGcjList(mContext, list)); - } - public void release() { - MogoStatusManager.getInstance().unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); - // 注销定位监听 CallerChassisLocationGCJ02ListenerManager.INSTANCE.removeListener(TAG); - //自动驾驶路线规划接口 - CallerPlanningRottingListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); loginService = null; OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null); @@ -384,18 +281,6 @@ public class OrderModel { return sInstance; } - private final IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { - // VR mode变更回调 - @Override - public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { - if (StatusDescriptor.VR_MODE == descriptor) { - if (mControllerStatusCallback != null) { - mControllerStatusCallback.onVRModeChanged(isTrue); - } - } - } - }; - private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() { @Override public void brakeStatusChanged(boolean isBrakeAvailable) { @@ -418,8 +303,6 @@ public class OrderModel { @Override public void onChassisLocationGCJ02(@Nullable MogoLocation mogoLocation) { if (null == mogoLocation) return; - mLongitude = mogoLocation.getLongitude(); - mLatitude = mogoLocation.getLatitude(); if (mControllerStatusCallback != null) { mControllerStatusCallback.onCarLocationChanged(mogoLocation); } @@ -450,7 +333,6 @@ public class OrderModel { CallerLogger.d(M_BUS + TAG, "行程日志-judgeArrivedStation() distance = " + distance + " to " + upcomingStation.getName()); onArriveAt(null); //无自动驾驶到站信息传null - return; } } @@ -605,7 +487,7 @@ public class OrderModel { */ public void abortTask() { CallerLogger.d(M_BUS + TAG, "结束当前路线abortTask"); - OrderServiceManager.abortTask(mContext, currentTaskId + OrderServiceManager.abortTask(mContext, busRoutesResult.getTaskId() , new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { @@ -617,7 +499,6 @@ public class OrderModel { removeTipRunnables(); // 取消自驾 CallerAutoPilotControlManager.INSTANCE.cancelAutoPilot(); - // startOrStopQueryPassengerWriteOff(false); } } @@ -788,41 +669,19 @@ public class OrderModel { OrderServiceManager.arriveSiteStation(mContext, stationList.get(arrivedStationIndex).getSeq(), stationList.get(arrivedStationIndex).getSiteId(), - currentTaskId,writeVersion, + busRoutesResult.getTaskId(),writeVersion, new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { CallerLogger.d(M_BUS + TAG, "行程日志-arriveSiteStation success"); -// if (o != null && o.code == 0){ -// queryBusRoutes(); -// isArrivedStation = true; -// isGoingToNextStation = false; -// arriveStationSuccess(arrivedStationIndex, departureStopName, -// arriveStation,arriveStationKr); -// } - //5s轮询核销乘客 -// startOrStopQueryPassengerWriteOff(true); } @Override public void onError() { -// if (!NetworkUtils.isConnected(mContext)) { -// ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); -// } else { -// ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); -// } } @Override public void onFail(int code, String failMsg) { -// if (ToastUtilsOch.isCustomFastClick(5000)) { -// if (!NetworkUtils.isConnected(mContext)) { -// ToastUtils.showShort("网络异常,请稍后重试"); -// } else { -// if (isArrivedStation) return; -// ToastUtils.showShort(failMsg); -// } -// } } }); } @@ -925,36 +784,19 @@ public class OrderModel { OrderServiceManager.leaveStation(mContext, stationList.get(backgroundCurrentStationIndex).getSeq(), stationList.get(backgroundCurrentStationIndex).getSiteId(), - currentTaskId,writeVersion, + busRoutesResult.getTaskId(),writeVersion, new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { -// isArrivedStation = false; -// CallerLogger.d(M_BUS + TAG, "行程日志-离站成功开往下一站===="); -// //需要更改当前站和下一站的状态 然后渲染 -// //startOrStopQueryPassengerWriteOff(false); -// queryBusRoutes(); -// leaveStationSuccess(backgroundCurrentStationIndex, currentStationName, -// finalNextStationName,finalNextStationNameKr); } @Override public void onError() { -// if (!NetworkUtils.isConnected(mContext)) { -// ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); -// } else { -// ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); -// } } @Override public void onFail(int code, String failMsg) { -// if (!NetworkUtils.isConnected(mContext)) { -// ToastUtils.showShort("网络异常,请稍后重试"); -// } else { -// ToastUtils.showShort("离站上报失败:" + failMsg); -// } } }); } @@ -1004,12 +846,8 @@ public class OrderModel { private void updateBusStatus(BusRoutesResult result) { if (result == null) return; busRoutesResult = result; - List site = result.getSites(); - currentTaskId = result.getTaskId(); - currentLineId = result.getLineId(); stationList.clear(); - stationList.addAll(site); - + stationList.addAll(result.getSites()); for (int i = 0; i < stationList.size(); i++) { BusStationBean s = stationList.get(i); @@ -1039,7 +877,6 @@ public class OrderModel { if (busRoutesResult != null){ beforeTaskTips(); } -// startOrStopQueryPassengerWriteOff(true); }else { removeTipRunnables(); } @@ -1162,13 +999,6 @@ public class OrderModel { } } - /** - * 延时查询站点信心 - */ - private void queryBusStationDelay() { - handler.sendEmptyMessageDelayed(MSG_QUERY_BUS_STATION, QUERY_BUS_STATION_DELAY); - } - /** * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 */ @@ -1202,7 +1032,7 @@ public class OrderModel { */ private void endTask() { CallerLogger.d(M_BUS + TAG, "任务正常走完endTask()"); - OrderServiceManager.endTask(mContext, currentTaskId + OrderServiceManager.endTask(mContext, busRoutesResult.getTaskId() , new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { @@ -1212,7 +1042,6 @@ public class OrderModel { clearBusStationDatas(); queryBusRoutes();// 重新获取任务 removeTipRunnables(); -// startOrStopQueryPassengerWriteOff(false); VoiceManager.INSTANCE.endOrderBus(); sendEndTaskToClient(); } @@ -1281,7 +1110,8 @@ public class OrderModel { // 登出 public void logout() { - loginService.loginOut(mLatitude, mLongitude); + MogoLocation gcj02 = CallerChassisLocationGCJ02ListenerManager.INSTANCE.getChassisLocationGCJ02(); + loginService.loginOut(gcj02.getLatitude(), gcj02.getLongitude()); } public void triggerStartServiceEvent(boolean isRestart, boolean send) { @@ -1291,7 +1121,7 @@ public class OrderModel { BusStationBean currentStation = stationList.get(backgroundCurrentStationIndex); BusStationBean nextStation = stationList.get(backgroundCurrentStationIndex + 1); BusAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestart, send, - currentStation.getName(), nextStation.getName(), currentLineId); + currentStation.getName(), nextStation.getName(), busRoutesResult.getLineId()); } public void triggerUnableStartAPReasonEvent() { @@ -1301,7 +1131,7 @@ public class OrderModel { BusStationBean currentStation = stationList.get(backgroundCurrentStationIndex); BusStationBean nextStation = stationList.get(backgroundCurrentStationIndex + 1); BusAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( - currentStation.getName(), nextStation.getName(), currentLineId, + currentStation.getName(), nextStation.getName(), busRoutesResult.getLineId(), OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason()); } @@ -1309,6 +1139,14 @@ public class OrderModel { return busRoutesResult; } + public BusStationBean getBusNextStation() { + // A->B 的过程中A站点的信息 + if (stationList == null || backgroundCurrentStationIndex >= stationList.size() - 1) { + return null; + } + return stationList.get(backgroundCurrentStationIndex); + } + public int getCurrentStationIndex() { return backgroundCurrentStationIndex; } @@ -1376,12 +1214,4 @@ public class OrderModel { return parameters; } - //接驳车不需要实现 - public void startOrStopOrderLoop(boolean start) { - - } - // //接驳车不需要实现 - public void runCarHeartbeat() { - - } } diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt index 8d634c146d..c68dd225a9 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt @@ -2,6 +2,7 @@ package com.mogo.och.bus.model import com.elegant.network.utils.GsonUtil import com.mogo.aicloud.services.socket.IMogoOnMessageListener +import com.mogo.commons.AbsMogoApplication import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.msgbox.MsgBoxBean @@ -14,19 +15,34 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.och.bus.bean.WriteOffCountResponse import com.mogo.och.bus.bean.WriteOffPassenger +import com.mogo.och.bus.net.OrderServiceManager import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg import com.mogo.och.common.module.bean.dpmsg.DPMsgType import com.mogo.och.common.module.bean.dpmsg.WriteOffDevicesMsg import com.mogo.och.common.module.bean.dpmsg.WriteOffMsg import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager import com.mogo.och.common.module.biz.constant.OchCommonConst +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.manager.loopmanager.BizLoopManager +import com.mogo.och.common.module.manager.loopmanager.LoopInfo import com.mogo.och.common.module.voice.VoiceNotice.showNotice +import io.reactivex.Observable +import io.reactivex.ObservableEmitter +import io.reactivex.ObservableOnSubscribe +import io.reactivex.schedulers.Schedulers object TicketModel : IReceivedMsgListener, IMogoOnMessageListener { private val TAG = "TicketModel" + private val SELECTWRITEOFFCOUNT = "SELECTWRITEOFFCOUNT" + + private var emitterMain: ObservableEmitter?=null + + private val observable = Observable.create(ObservableOnSubscribe { emitter -> emitterMain = emitter }) + init { //监听乘客屏发来的消息 @@ -38,7 +54,7 @@ object TicketModel : IReceivedMsgListener, IMogoOnMessageListener{ + override fun onSuccess(data: WriteOffCountResponse?) { + data?.data?.let { + emitterMain?.onNext(it) + d(SceneConstant.M_BUS + TAG, "${busNextStation.name}核销人数:${it}") + } + } + + override fun onFail(code: Int, msg: String?) { + + } + }) + } + + fun getWriteOffCountObservable():Observable{ + return observable } private fun receiveWrteOffInfo(writeOffMsg: WriteOffMsg?) { diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java index 2c46b0fb79..e1503c35cb 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java @@ -10,6 +10,7 @@ import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; import com.mogo.och.bus.bean.BusResetDrivingLineRequest; import com.mogo.och.bus.bean.BusUpdateSiteStatusRequest; +import com.mogo.och.bus.bean.WriteOffCountResponse; import io.reactivex.Observable; import retrofit2.http.Body; @@ -125,5 +126,11 @@ public interface IBascApiService { @Headers( {"Content-type:application/json;charset=UTF-8"} ) @POST("/och-shuttle-cabin/api/flow/v1/driver/endTask") Observable endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); + + + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @GET("och-shuttle-cabin/api/business/v1/task/writeOffCount") + Observable writeOffCount(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("taskId") String taskId, @Query("siteId") String siteId); + } diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt index 387ef5ba98..6792800f9e 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt @@ -202,4 +202,21 @@ object OrderServiceManager { .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "queryBusLines")) } + + @JvmStatic + fun queryBusTaskByLineId( + context: Context, + taskId: String?, + siteId: String?, + callback: OchCommonServiceCallback? + ) { + mService.writeOffCount( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + SharedPrefsMgr.getInstance().token, + taskId, + siteId + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "writeOffCount")) + } } \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java index d85b685282..bab7fc443b 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java @@ -53,25 +53,4 @@ public class BusModelLoopManager { // mQueryPassengerDisposable = null; // } // } - - public void startHeartbeatLoop() { - if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) { - return; - } - CallerLogger.i(M_BUS + TAG, "startHeartbeatLoop()"); - mHeartbeatDisposable = Observable.interval(BusConst.LOOP_DELAY, - BusConst.LOOP_PERIOD_60S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> OrderModel.getInstance().runCarHeartbeat()); - } - - public void stopHeartbeatLoop() { - if (mHeartbeatDisposable != null) { - CallerLogger.i(M_BUS + TAG, "stopHeartbeatLoop()"); - mHeartbeatDisposable.dispose(); - mHeartbeatDisposable = null; - } - } } diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java index 300e9fe8f4..796b8b1ee7 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -10,7 +10,6 @@ import androidx.lifecycle.LifecycleOwner; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.voice.AIAssist; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; @@ -18,10 +17,8 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.data.bean.BusStationBean; -import com.mogo.och.bus.bean.WriteOffPassenger; import com.mogo.och.bus.callback.IBusADASStatusCallback; import com.mogo.och.bus.callback.IBusControllerStatusCallback; -import com.mogo.och.bus.callback.IPassengerCallback; import com.mogo.och.bus.callback.IRefreshBusStationsCallback; import com.mogo.och.bus.callback.ISlidePannelHideCallback; import com.mogo.och.bus.fragment.BusFragment; @@ -31,7 +28,6 @@ import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; import com.mogo.och.common.module.biz.callback.ILoginCallback; import com.mogo.och.common.module.biz.constant.LoginStatusManager; import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager; -import com.mogo.och.common.module.voice.VoiceNotice; import java.util.ArrayList; @@ -49,7 +45,7 @@ import system_master.SystemStatusInfo; */ public class BusPresenter extends Presenter implements IRefreshBusStationsCallback, ISlidePannelHideCallback - , IMoGoAutopilotStatusListener, IBusControllerStatusCallback, ILoginCallback, IPassengerCallback, IBusADASStatusCallback { + , IMoGoAutopilotStatusListener, IBusControllerStatusCallback, ILoginCallback, IBusADASStatusCallback { private static final String TAG = "BusPresenter"; @@ -83,7 +79,6 @@ public class BusPresenter extends Presenter OrderModel.getInstance().setRefreshBusStationsCallback(this); OrderModel.getInstance().setSlidePanelHideCallback(this); OrderModel.getInstance().setControllerStatusCallback(this); - OrderModel.getInstance().setPassengerCallback(this); OrderModel.getInstance().setAdasStatusCallback(this); } @@ -91,7 +86,6 @@ public class BusPresenter extends Presenter OrderModel.getInstance().setRefreshBusStationsCallback(null); OrderModel.getInstance().setSlidePanelHideCallback(null); OrderModel.getInstance().setControllerStatusCallback(null); - OrderModel.getInstance().setPassengerCallback(null); OrderModel.getInstance().setAdasStatusCallback(null); OCHAdasAbilityManager.getInstance().release(); } @@ -192,11 +186,6 @@ public class BusPresenter extends Presenter } } - @Override - public void onVRModeChanged(boolean isVRMode) { - runOnUIThread(() -> mView.onVRModeChanged(isVRMode)); - } - @Override public void onCarLocationChanged(MogoLocation location) { if (null != location) { @@ -261,12 +250,10 @@ public class BusPresenter extends Presenter public void loginSuccess(DriverStatusQueryRespBean data) { CallerLogger.d(M_BUS + TAG, " loginStatus =" + LoginStatusManager.isLogin()); if(LoginStatusManager.isLogin()){ - OrderModel.getInstance().startOrStopOrderLoop(true); // OrderModel.getInstance().queryBusRoutes(); OrderModel.getInstance().queryBusCacheRoutes(); }else { BusTrajectoryManager.getInstance().stopTrajReqLoop(); - OrderModel.getInstance().startOrStopOrderLoop(false); BusTrajectoryManager.getInstance().stopTrajReqLoop(); clearBusStationsMarkers(); mView.hideSlidePanel(); @@ -279,19 +266,6 @@ public class BusPresenter extends Presenter } - @Override - public void playPassenger(WriteOffPassenger passenger) { - int passengerNum = passenger.passengerSize; - if (passengerNum > 1){ //多人播报 "x人" ---》x人核验通过 - VoiceNotice.showNotice(passengerNum+"人核验通过", AIAssist.LEVEL3); - OrderModel.getInstance().sendWriteOffNumToClient(passengerNum+"人核验通过"); - }else { //是 1 播放 "滴" 2022.11.09 改为: "核验通过" -// mView.playDI(); - VoiceNotice.showNotice("核验通过", AIAssist.LEVEL3); - OrderModel.getInstance().sendWriteOffNumToClient("核验通过"); - } - } - @Override public void onStartAdasFailure() { runOnUIThread(() -> mView.stopAnimAndUpdateBtnStatus()); diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffView.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffView.kt new file mode 100644 index 0000000000..c3542fc18a --- /dev/null +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffView.kt @@ -0,0 +1,54 @@ +package com.mogo.och.bus.ui.writeoff + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.och.bus.R +import kotlinx.android.synthetic.main.shuttle_wirte_off_view.view.tv_write_off_count + +class WriteOffView : ConstraintLayout, WriteOffViewModel.IwriteOffViewCallback { + + private val TAG = "ItineraryView" + + 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, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.shuttle_wirte_off_view, this, true) + } + + + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(WriteOffViewModel::class.java) + } + + viewModel?.setWriteOffCallback(this) + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun setWriteOffCount(showText: String) { + tv_write_off_count.text = showText + } + + +} \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffViewModel.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffViewModel.kt new file mode 100644 index 0000000000..297d35b959 --- /dev/null +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffViewModel.kt @@ -0,0 +1,68 @@ +package com.mogo.och.bus.ui.writeoff + +import androidx.lifecycle.ViewModel +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.bus.R +import com.mogo.och.bus.model.TicketModel +import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.disposables.Disposable + +class WriteOffViewModel : ViewModel() { + + private val TAG = WriteOffViewModel::class.java.simpleName + + private var viewCallback: IwriteOffViewCallback? = null + + init { + + } + + private var disposable: Disposable? = null + + private val observer = object : Observer { + override fun onSubscribe(d: Disposable) { + disposable = d + } + + override fun onError(e: Throwable) { + + } + + override fun onComplete() { + + } + + override fun onNext(countInfo: String) { + viewCallback?.setWriteOffCount(countInfo) + } + + } + + fun setWriteOffCallback(viewCallback: IwriteOffViewCallback) { + this.viewCallback = viewCallback + TicketModel + .getWriteOffCountObservable() + .flatMap { t -> + val showText = + AbsMogoApplication.getApp().getString(R.string.shuttle_write_off_count, t) + CallerLogger.d(SceneConstant.M_BUS + TAG, "显示文案:${showText}") + Observable.just(showText) + } + .subscribe(observer) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + RxUtils.disposeSubscribe(disposable) + } + + interface IwriteOffViewCallback { + fun setWriteOffCount(count:String) + } + +} \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/res/drawable-xhdpi/shuttle_write_off_bg.png b/OCH/shuttle/driver/src/main/res/drawable-xhdpi/shuttle_write_off_bg.png new file mode 100755 index 0000000000..d4d1eac25f Binary files /dev/null and b/OCH/shuttle/driver/src/main/res/drawable-xhdpi/shuttle_write_off_bg.png differ diff --git a/OCH/shuttle/driver/src/main/res/drawable/bus_line_panel_bg.png b/OCH/shuttle/driver/src/main/res/drawable/bus_line_panel_bg.png deleted file mode 100755 index 3166d20e37..0000000000 Binary files a/OCH/shuttle/driver/src/main/res/drawable/bus_line_panel_bg.png and /dev/null differ diff --git a/OCH/shuttle/driver/src/main/res/layout/bus_base_fragment.xml b/OCH/shuttle/driver/src/main/res/layout/bus_base_fragment.xml index 4ec7f643b1..d42fc8e27d 100644 --- a/OCH/shuttle/driver/src/main/res/layout/bus_base_fragment.xml +++ b/OCH/shuttle/driver/src/main/res/layout/bus_base_fragment.xml @@ -201,6 +201,29 @@ app:layout_constraintLeft_toLeftOf="@id/module_mogo_och_station_panel_container" app:layout_constraintTop_toBottomOf="@id/module_mogo_och_station_panel_container" tools:visibility="visible" /> + + + + - - - - - - - - - - - - - - - - - + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/res/values/colors.xml b/OCH/shuttle/driver/src/main/res/values/colors.xml index 2851302580..90c817402c 100644 --- a/OCH/shuttle/driver/src/main/res/values/colors.xml +++ b/OCH/shuttle/driver/src/main/res/values/colors.xml @@ -57,4 +57,7 @@ #4DFFFFFF #FFFFFF #323C6F + #CAD6FF + #BF0E3DBC + #BF1E2E89 \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/res/values/strings.xml b/OCH/shuttle/driver/src/main/res/values/strings.xml index c9fc1117b7..dbde761190 100644 --- a/OCH/shuttle/driver/src/main/res/values/strings.xml +++ b/OCH/shuttle/driver/src/main/res/values/strings.xml @@ -39,6 +39,8 @@ 取消 暂无任务 + 本站核销成功:%1$d人 + 本站核销成功:0人 diff --git a/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/constant/BusPassengerConst.kt b/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/constant/BusPassengerConst.kt index dc0bb741a3..eb080ca191 100644 --- a/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/constant/BusPassengerConst.kt +++ b/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/constant/BusPassengerConst.kt @@ -24,7 +24,7 @@ class BusPassengerConst { const val STATION_STATUS_ARRIVING = 3 //bus平均速度 bus的平均里程:25km/h - const val BUS_AVERAGE_SPEED = 25 + const val BUS_AVERAGE_SPEED = 10 //接驳/B2平均速度 bus的平均里程:10km/h const val SHUTTLE_AVERAGE_SPEED = 10 @@ -32,5 +32,7 @@ class BusPassengerConst { const val BUS_SP_KEY_ORDER_SUM_DIS = "BUS_SP_KEY_ORDER_SUM_DIS" const val QUERY_BUS_P_STATION_DELAY = 3 * 1000L + + const val ARRIVE_DISTANCE_4_STATION_INTRODUCE = 200 //站点介绍 } } \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/network/ServiceApi.java b/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/network/ServiceApi.java index b1cd8187a1..4394df464f 100644 --- a/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/network/ServiceApi.java +++ b/OCH/shuttle/passenger/src/main/java/com/mogo/och/shuttle/passenger/network/ServiceApi.java @@ -39,7 +39,7 @@ public interface ServiceApi { Observable queryDriverOperationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); /** - * 查询司机端的登陆状态 + * 核销接口 */ @Headers({"Content-type:application/json;charset=UTF-8"}) @POST("/och-vehicle/api/scanner/device/writeOff") diff --git a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java index 0c0e1574e8..985cea8437 100644 --- a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java +++ b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java @@ -26,7 +26,9 @@ import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant; import com.mogo.eagle.core.utilcode.util.GsonUtils; +import com.mogo.eagle.core.utilcode.util.StringUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.och.common.module.voice.VoiceNotice; import com.mogo.och.shuttle.passenger.R; import com.mogo.och.common.module.bean.dpmsg.AppConnectMsg; import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg; @@ -111,8 +113,6 @@ public class BusPassengerModel { List mStations = new ArrayList<>(); private int mNextStationIndex = 0;// 要到达站的index private List mTwoStationsRouts = new ArrayList<>(); - private int mPreRouteIndex = 0; - private int mWipePreIndex = 0; private volatile boolean isGoingToNextStation = false; @@ -298,7 +298,6 @@ public class BusPassengerModel { isGoingToNextStation = false; Logger.d(M_BUS_P + TAG, "order = station= arrive"); - mPreRouteIndex = 0; mRouteLineInfoCallback.updateStationsInfo(stations,i,true); return; } @@ -388,6 +387,16 @@ public class BusPassengerModel { } } } + // 小于200m 播报站点介绍 + if(distance<200){ + BusStationBean stationNext = mStations.get(mNextStationIndex); + if(!stationNext.isPlayTts()){ + if (!StringUtils.isEmpty(stationNext.getIntroduction())) { + VoiceNotice.showNotice(stationNext.getIntroduction()); + stationNext.setPlayTts(true); + } + } + } mAutopilotPlanningCallback.routePlanningToNextStationChanged( (long)distance, (long)lastTime ); diff --git a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt index 7a1c0df493..4a060b9c11 100644 --- a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt +++ b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt @@ -210,42 +210,46 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( d(SceneConstant.M_TAXI + TAG, "没有点") return } - texIndexList.clear() - val allPoints = ArrayList(routeArrived) - for (i in routeArrived.indices) { - if (routeArrived.size > 1 && i < routeArrived.size - 1) { - texIndexList.add(0) + try { + texIndexList.clear() + val allPoints = ArrayList(routeArrived) + for (i in routeArrived.indices) { + if (routeArrived.size > 1 && i < routeArrived.size - 1) { + texIndexList.add(0) + } + } + texIndexList.add(0) + location?.let { + allPoints.add(LatLng(it.latitude, it.longitude)) + } + allPoints.addAll(routeArriving) + for (ignored in routeArrived) { + texIndexList.add(1) + } + mPolyline?.let { + it.points = allPoints + it.options.customTextureIndex = texIndexList + return + } + if (textureList.isEmpty()) { + textureList.add(mArrivedRes) + textureList.add(mUnArrivedRes) + } + //设置线段纹理 + val polylineOptions = PolylineOptions().apply { + addAll(allPoints) + isUseTexture = true + width(15f) + lineCapType(PolylineOptions.LineCapType.LineCapRound) + customTextureList = textureList + customTextureIndex = texIndexList } - } - texIndexList.add(0) - location?.let { - allPoints.add(LatLng(it.latitude, it.longitude)) - } - allPoints.addAll(routeArriving) - for (ignored in routeArrived) { - texIndexList.add(1) - } - mPolyline?.let { - it.points = allPoints - it.options.customTextureIndex = texIndexList - return - } - if (textureList.isEmpty()) { - textureList.add(mArrivedRes) - textureList.add(mUnArrivedRes) - } - //设置线段纹理 - val polylineOptions = PolylineOptions().apply { - addAll(allPoints) - isUseTexture = true - width(15f) - lineCapType(PolylineOptions.LineCapType.LineCapRound) - customTextureList = textureList - customTextureIndex = texIndexList - } - // 绘制线 - mPolyline = mAMap.addPolyline(polylineOptions) + // 绘制线 + mPolyline = mAMap.addPolyline(polylineOptions) + } catch (e: Exception) { + e.printStackTrace() + } } override fun clearPolyline() { diff --git a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt index c4eebf5beb..ee8f705ac9 100644 --- a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt +++ b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt @@ -30,12 +30,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.StringUtils import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.shuttle.passenger.R -import com.mogo.och.shuttle.passenger.constant.BusPassengerConst -import com.mogo.och.shuttle.passenger.callback.AutoPilotStatusCallback -import com.mogo.och.shuttle.passenger.callback.DrivingInfoCallback -import com.mogo.och.shuttle.passenger.network.PM2ModelLoopManager import com.mogo.och.common.module.bean.dpmsg.* import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager.pushAppOperationalMsgBox import com.mogo.och.common.module.biz.constant.OchCommonConst @@ -43,11 +39,17 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.common.module.voice.VoiceNotice.showNotice import com.mogo.och.data.bean.BusRoutesResult import com.mogo.och.data.bean.BusStationBean import com.mogo.och.data.bean.BusTransferData +import com.mogo.och.shuttle.passenger.R import com.mogo.och.shuttle.passenger.bean.response.PassengerOperationStatusResponse import com.mogo.och.shuttle.passenger.bean.response.PassengerRoutesResponse +import com.mogo.och.shuttle.passenger.callback.AutoPilotStatusCallback +import com.mogo.och.shuttle.passenger.callback.DrivingInfoCallback +import com.mogo.och.shuttle.passenger.constant.BusPassengerConst +import com.mogo.och.shuttle.passenger.network.PM2ModelLoopManager import com.mogo.och.shuttle.passenger.network.PassengerServiceManager import io.reactivex.disposables.Disposable import mogo.telematics.pad.MessagePad @@ -545,6 +547,21 @@ class PM2DrivingModel private constructor() { } val lastTime = lastSumLength / BusPassengerConst.SHUTTLE_AVERAGE_SPEED * 3.6 //秒 d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastSumLength = $lastSumLength") + + // 小于200m 播报站点介绍 + // 小于200m 播报站点介绍 + if (lastSumLength < 200) { + val stationNext = mStations[mNextStationIndex] + if (!stationNext.isPlayTts) { + if (!StringUtils.isEmpty(stationNext.introduction)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + speakTTS(stationNext.introduction) + } + stationNext.isPlayTts = true + } + } + } + mDrivingInfoCallback?.updateRemainMT( lastSumLength.toLong(), lastTime.toLong() diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt index f0ee4dd32d..249d022bb9 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt @@ -51,7 +51,7 @@ class SweeperConst { 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_sweeper_ap_unable_start_reason" const val EVENT_PARAM_UNABLE_START_REASON = "unable_start_reason"; // 埋点Key: 切换清扫业务模式 diff --git a/config.gradle b/config.gradle index 00f35c5053..83d123e51d 100644 --- a/config.gradle +++ b/config.gradle @@ -219,7 +219,7 @@ ext { //========================= 扫码机 ====================== serialport : 'com.mogo.support.serialport:client:1.0.0-alpha5', - thread_opt : "com.mogo.thread.opt:lib:10.10.2", + thread_opt : "com.mogo.thread.opt:lib:10.10.3", weak_network : "com.mogo.weak:network:1.0.1", btrace : "com.bytedance.btrace:rhea-core:2.0.0", @@ -228,7 +228,7 @@ ext { log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.30", // 安全证书 - passport_secret : "com.zhidaoauto:sdk-java:1.0.5-SNAPSHOT", + passport_secret : "com.zhidaoauto:sdk-java:1.0.6-SNAPSHOT", // 主线程卡顿监测 block_detector : "com.mogo.eagle.core.block:runtime:10.90.60", diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt index f04fe535d4..55126f96de 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt @@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.zhjt.mogo.adas.data.bean.MogoReport import mogo_msg.MogoReportMsg /** @@ -87,7 +88,32 @@ class IPCReportManager : IMoGoAutopilotStatusListener { || it.resultList.contains(RESULT_REMOTEPILOT_DISABLE) || it.resultList.contains(RESULT_AUTOPILOT_INFERIOR) || it.resultList.contains(RESULT_SHOW_WARNING) - || it.resultList.contains(RESULT_REMOTEPILOT_INFERIOR)){ + || it.resultList.contains(RESULT_REMOTEPILOT_INFERIOR) + || it.code == MogoReport.Code.Info.ISYS.STARTING + || it.code == MogoReport.Code.Info.ISYS.RUNNING + || it.code == MogoReport.Code.Info.IMAP.ENTRY_AUTOPILOT + || it.code == MogoReport.Code.Info.IMAP.EXIT_AUTOPILOT + || it.code == MogoReport.Code.Info.IMAP.ENTRY_REMOTEPILOT + || it.code == MogoReport.Code.Info.IMAP.EXIT_REMOTEPILOT + || it.code == MogoReport.Code.Info.IMAP.CONTROLLER_START_FM_COMMAND + || it.code == MogoReport.Code.Info.IMAP.CONTROLLER_FINISH_FM_COMMAND + || it.code == MogoReport.Code.Info.IMAP.CONTROLLER_ABORT_FM_COMMAND + || it.code == MogoReport.Code.Info.IMAP.PLANNING_START_FM_COMMAND + || it.code == MogoReport.Code.Info.IMAP.PLANNING_FINISH_FM_COMMAND + || it.code == MogoReport.Code.Info.IMAP.PLANNING_ABORT_FM_COMMAND + || it.code == MogoReport.Code.Info.ISYS.ALREADY_AUTOPILOT_STATE + || it.code == MogoReport.Code.Info.ISYS.AUTOPILOT_TAKEN_OVER_BY_REMOTE + || it.code == MogoReport.Code.Info.ISSM.OTA_UPGRADE_START + || it.code == MogoReport.Code.Info.ISSM.OTA_UPGRADE_FINISH + || it.code == MogoReport.Code.Info.ISSM.OTA_UPGRADE_LOADING + || it.code == MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_START + || it.code == MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_SUCCESS + || it.code == MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_TIMEOUT + || it.code == MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_FAILURE + || it.code == MogoReport.Code.Info.IPARALLEL.AICLOUD_CONNECTION_OK + || it.code == MogoReport.Code.Info.IVEHICLE.NOT_IN_TROUBLE + || it.code == MogoReport.Code.Info.ILCT.RTK_STATUS_NORMAL + ){ val reportEntity = ReportEntity(TimeUtils.millis2String(System.currentTimeMillis()), it.src,it.level,it.msg,it.code,it.resultList,it.actionsList,false) CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.REPORT, reportEntity)) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index 3602ef9503..e64c061cee 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -52,6 +52,11 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : private val RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED" private val RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE" + //Warning + private val RESULT_AUTOPILOT_INFERIOR = "RESULT_AUTOPILOT_INFERIOR" + private val RESULT_SHOW_WARNING = "RESULT_SHOW_WARNING" + private val RESULT_REMOTEPILOT_INFERIOR = "RESULT_REMOTEPILOT_INFERIOR" + fun setData(data: List) { this.data = data notifyDataSetChanged() @@ -378,13 +383,23 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : holder.ivReportImageOpen.setImageDrawable(getDrawable(R.drawable.icon_report_error_open)) holder.tvReportLevelNormal.text = "Error" holder.tvReportLevelOpen.text = "Error" - } else { + } else if(reportEntity.resultList.contains(RESULT_AUTOPILOT_INFERIOR) + || reportEntity.resultList.contains(RESULT_SHOW_WARNING) + || reportEntity.resultList.contains(RESULT_REMOTEPILOT_INFERIOR) + ){ //Warning holder.ivReportImageNormal.setImageDrawable(getDrawable(R.drawable.icon_report_warning_normal)) holder.ivReportImageOpen.setImageDrawable(getDrawable(R.drawable.icon_report_warning_open)) holder.tvReportLevelNormal.text = "Warning" holder.tvReportLevelOpen.text = "Warning" + }else { + //INFO + holder.ivReportImageNormal.setImageDrawable(getDrawable(R.drawable.icon_report_warning_normal)) + holder.ivReportImageOpen.setImageDrawable(getDrawable(R.drawable.icon_report_warning_open)) + holder.tvReportLevelNormal.text = "Info" + holder.tvReportLevelOpen.text = "Info" } + holder.tvReportTimeNormal.text = "时间:${TimeUtils.millis2String(it[position].timestamp)}" holder.tvReportTimeOpen.text = diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt index 83bd1a85c3..3ba0f5ca63 100644 --- a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt @@ -280,9 +280,9 @@ class HttpDnsStartUp : AndroidStartup() { linkChainLog = CHAIN_TYPE_STATUS, linkCode = CHAIN_SOURCE_CLOUD, nodeAliasCode = CHAIN_CODE_CLOUD_PASSPORT_AUTH_OK, - paramIndexes = [0] + paramIndexes = [0,1] ) - override fun onSuccess(securityKey: String) { + override fun onSuccess(securityKey: String, rootKey: String) { CallerLogger.d( "$M_MAIN$TAG", "onSuccess securityKey:$securityKey , thread:${Thread.currentThread().name}" @@ -295,6 +295,7 @@ class HttpDnsStartUp : AndroidStartup() { ) SharedPrefsMgr.getInstance() .putBoolean("securityKey-${DebugConfig.getNetMode()}", true) + CallerCloudListenerManager.invokeCloudCrtFile(securityKey, rootKey) } @ChainLog( diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/IPassportSecret.java b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/IPassportSecret.java index 44b37c09ca..674e6c7c48 100644 --- a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/IPassportSecret.java +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/IPassportSecret.java @@ -2,7 +2,7 @@ package com.mogo.eagle.core.function.startup.stageone.secret; public interface IPassportSecret { - void onSuccess(String secretKey); + void onSuccess(String secretKey, String rootKey); void onFailed(int errorCode, String errorMsg); } diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/PassPortSecret.java b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/PassPortSecret.java index accfd8d30a..dc6aa73660 100644 --- a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/PassPortSecret.java +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/PassPortSecret.java @@ -5,6 +5,7 @@ import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import java.io.UnsupportedEncodingException; +import java.util.List; import constant.ErrorCode; import domain.Passport; @@ -42,14 +43,15 @@ public class PassPortSecret { secretCB.onFailed(r.getCode(), r.getMsg()); } Passport passport = (Passport) r.getData(); - domain.R res = passportService.deviceActive(passport); + domain.R> res = passportService.deviceActive(passport); if (res.getCode() != ErrorCode.OK.getCode()) { secretCB.onFailed(res.getCode(), res.getMsg()); } else { - String secretKey = res.getData(); + List secretKey = res.getData(); try { - String result = new String(Base64.encode(secretKey.getBytes("utf-8"), Base64.NO_WRAP), "utf-8"); - secretCB.onSuccess(result); + String result = new String(Base64.encode(secretKey.get(0).getBytes("utf-8"), Base64.NO_WRAP), "utf-8"); + String root = new String(Base64.encode(secretKey.get(1).getBytes("utf-8"), Base64.NO_WRAP), "utf-8"); + secretCB.onSuccess(result, root); } catch (UnsupportedEncodingException e) { secretCB.onFailed(5000, "url encode error :" + secretKey); } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/cloud/IMoGoCloudListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/cloud/IMoGoCloudListener.kt index ac98d5713f..c57446b7a2 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/cloud/IMoGoCloudListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/cloud/IMoGoCloudListener.kt @@ -4,6 +4,8 @@ import com.mogo.eagle.core.data.v2x.V2XEvent interface IMoGoCloudListener{ + fun authCrtFile(device:String, root:String){} + fun tokenGot(token: String, sn: String){} /** diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudListenerManager.kt index 0c2cab8ca1..8dfd069548 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudListenerManager.kt @@ -12,6 +12,12 @@ object CallerCloudListenerManager : CallerBase() { @Volatile private var sn: String? = null + @Volatile + private var deviceCrtFile: String? = null + + @Volatile + private var rootCrtFile: String? = null + override fun doSomeAfterAddListener(tag: String, listener: IMoGoCloudListener) { super.doSomeAfterAddListener(tag, listener) if (!token.isNullOrEmpty() && !sn.isNullOrEmpty()) { @@ -19,6 +25,23 @@ object CallerCloudListenerManager : CallerBase() { } } + fun getRootCrtF(): String? { + return rootCrtFile + } + + fun getDeviceCrtF(): String? { + return deviceCrtFile + } + + fun invokeCloudCrtFile(deviceCrtFile: String, rootCrtFile: String) { + this.deviceCrtFile = deviceCrtFile + this.rootCrtFile = rootCrtFile + M_LISTENERS.forEach { + val listener = it.value + listener.authCrtFile(deviceCrtFile, rootCrtFile) + } + } + /** * 分发获取到的设备sn */ diff --git a/gradle.properties b/gradle.properties index 74ab6316ee..b508cfd18e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -150,28 +150,28 @@ MATRIX_VERSION=2.0.8 # 测试模式司机端版本号 NOOP_DRIVER_VERSION=3.2.0 # 公交模式司机端版本号 -BUS_DRIVER_VERSION=6.2.8 +BUS_DRIVER_VERSION=6.2.9 # 公交模式乘客端端版本号 -BUS_PASSENGER_VERSION=5.2.8 +BUS_PASSENGER_VERSION=5.2.9 # 接驳模式司机端版本号 -SHUTTLE_DRIVER_VERSION=6.2.8 +SHUTTLE_DRIVER_VERSION=6.2.9 # 接驳模式乘客端端版本号 -SHUTTLE_PASSENGER_VERSION=5.2.8 +SHUTTLE_PASSENGER_VERSION=5.2.9 # 出租车模式司机端版本号 -TAXI_DRIVER_VERSION=6.2.8 +TAXI_DRIVER_VERSION=6.2.9 # 出租车模式乘客端端版本号 -TAXI_PASSENGER_VERSION=5.2.8 +TAXI_PASSENGER_VERSION=5.2.9 # 出租车模式司机端版本号 -TAXIUNMANNED_DRIVER_VERSION=6.2.8 +TAXIUNMANNED_DRIVER_VERSION=6.2.9 # 出租车模式乘客端端版本号 -TAXIUNMANNED_PASSENGER_VERSION=5.2.8 +TAXIUNMANNED_PASSENGER_VERSION=5.2.9 # 包车模式司机端版本号 -CHARTER_DRIVER_VERSION=6.2.8 +CHARTER_DRIVER_VERSION=6.2.9 # 包车模式乘客端端版本号 -CHARTER_PASSENGER_VERSION=5.2.8 +CHARTER_PASSENGER_VERSION=5.2.9 # 支持云控清扫车模式司机端版本号 -SWEEPERCLOUD_DRIVER_VERSION=6.2.8 +SWEEPERCLOUD_DRIVER_VERSION=6.2.9 # 清扫车模式司机端版本号 -SWEEPEROPERATE_DRIVER_VERSION=6.2.8 +SWEEPEROPERATE_DRIVER_VERSION=6.2.9 diff --git a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/MogoReport.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/MogoReport.java index 1f135dbf71..35ed63dc7b 100644 --- a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/MogoReport.java +++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/MogoReport.java @@ -7,7 +7,7 @@ import java.util.Map; /** * 监控事件报告中定义的事件以及解释 * 根据MAP3.7.1事件定义编写 - * http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=123445235 最后修改于2023-11-07 + * http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=123445242 最后修改于2024-01-22 */ public class MogoReport { public static final String RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED";//自动驾驶系统启动失败 @@ -478,6 +478,8 @@ public class MogoReport { String TASK_CONFIG_EMPTY = "ERECORD_TASK_CONFIG_EMPTY";//配置为空 @CodeInfo("2.10.0") String TASK_QUEUE_EMPTY = "ERECORD_TASK_QUEUE_EMPTY";//数据队列为空 + @CodeInfo("3.6.0") + String TASK_NODE_TO_TOPICS_EMPTY = "ERECORD_TASK_NODE_TO_TOPICS_EMPTY";//通过节点名获取不到topic列表---ROS2版本新增 } /** @@ -627,7 +629,7 @@ public class MogoReport { @CodeInfo("2.6.0") String SYSTEM_OUT_IDLE = "ISYS_SYSTEM_OUT_IDLE";//系统退出空闲状态 @CodeInfo("3.3.0") - String ALREADY_AUTOPILOT_STATE = "ISYS_ALREADY_AUTOPILOT_STATE";//已经在自驾状态驾驶,忽略自驾命令 + String ALREADY_AUTOPILOT_STATE = "ISYS_ALREADY_AUTOPILOT_STATE";//已经在自驾状态驾驶,继续自驾命令 @CodeInfo("3.3.1") String AUTOPILOT_TAKEN_OVER_BY_REMOTE = "ISYS_AUTOPILOT_TAKEN_OVER_BY_REMOTE";//自动驾驶被远程驾驶接管 @CodeInfo("3.6.0") @@ -686,6 +688,8 @@ public class MogoReport { String OTA_UPGRADE_START = "ISSM_OTA_UPGRADE_START";//OTA升级开始(升级内容见msg) @CodeInfo("3.7.0") String OTA_UPGRADE_FINISH = "ISSM_OTA_UPGRADE_FINISH";//OTA升级结束(升级内容见msg) + @CodeInfo("3.8.0") + String OTA_UPGRADE_LOADING = "ISSM_OTA_UPGRADE_LOADING";//OTA升级进行中 @CodeInfo("3.7.0") String RECEIVE_SHUTDOWN_SIGNAL = "ISSM_RECEIVE_SHUTDOWN_SIGNAL";//SSM收到下电信号 @CodeInfo("3.3.0") diff --git a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java index d5f24521ed..26d59c190f 100644 --- a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java +++ b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java @@ -81,7 +81,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { .token(isDebug ? BYTEAMP_AppToken_DEV : BYTEAMP_AppToken)// 设置鉴权token,可从平台应用信息处获取,token错误无法上报数据 .versionCode(CommonUtils.getVersionCode(context))// 可选,默认取PackageInfo中的versionCode .versionName(CommonUtils.getVersionName(context))// 可选,默认取PackageInfo中的versionName - .channel(MetaDataUtils.getMetaDataInApp("BUGLY_APP_CHANNEL"))// 可选,设置App发布渠道,在平台可以筛选 + .channel(FunctionBuildConfig.appIdentityMode)// 可选,设置App发布渠道,在平台可以筛选 // .url("www.xxx.com")// 默认不需要,私有化部署才配置上报地址 //可选,可以设置自定义 did,不设置会使用内部默认的 .dynamicParams(new MonitorCrash.Config.IDynamicParams() { @@ -124,7 +124,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { // 地图版本 dimension.put("APP_MAP_SDK_VERSION", DebugConfig.getMapVersion()); // 渠道信息 - dimension.put("APP_CHANNEL", MetaDataUtils.getMetaDataInApp("BUGLY_APP_CHANNEL")); + dimension.put("APP_CHANNEL", FunctionBuildConfig.appIdentityMode); // 车辆类型 dimension.put("APP_CAR_TYPE", AppIdentityModeUtils.INSTANCE.getBuildCarType(FunctionBuildConfig.appIdentityMode)); //************************************* APP构建的信息 *********************************************** @@ -176,7 +176,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { // 地图版本 map.put("APP_MAP_SDK_VERSION", DebugConfig.getMapVersion()); // 渠道信息 - map.put("APP_CHANNEL", MetaDataUtils.getMetaDataInApp("BUGLY_APP_CHANNEL")); + map.put("APP_CHANNEL", FunctionBuildConfig.appIdentityMode); // 车辆类型 map.put("APP_CAR_TYPE", AppIdentityModeUtils.INSTANCE.getBuildCarType(FunctionBuildConfig.appIdentityMode)); //************************************* APP构建的信息 *********************************************** @@ -256,7 +256,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { //私有化部署:配置数据上报的域名 (私有化部署才需要配置,内部有默认域名),测试支持设置http://www.xxx.com 默认是https协议 // builder.defaultReportDomain("www.xxx.com"); //设置渠道。1.3.16版本增加接口 - builder.channel(MetaDataUtils.getMetaDataInApp("BUGLY_APP_CHANNEL")); + builder.channel(FunctionBuildConfig.appIdentityMode); //打开自定义日志回捞能力,1.4.1版本新增接口 builder.enableLogRecovery(true); //设置数据和Rangers Applog数据打通,设备标识did必填。1.3.16版本增加接口