[6.0.0] 1、开启自驾坐标错误处理 2、地图marker坐标处理

This commit is contained in:
wangmingjun
2023-08-21 19:43:47 +08:00
parent b6033f6104
commit e009a4c5cf
5 changed files with 109 additions and 184 deletions

View File

@@ -1,18 +0,0 @@
package com.mogo.och.taxi.base
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
abstract class BaseUiFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
initView(view, savedInstanceState)
initData(savedInstanceState)
super.onViewCreated(view, savedInstanceState)
}
abstract fun initView(view: View, savedInstanceState: Bundle?)
abstract fun initData(savedInstanceState: Bundle?)
}

View File

@@ -44,7 +44,8 @@ data class OrderDetail(
}
}
data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double) {
data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double,
var wgs84Lon: Double, var wgs84Lat: Double) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
@@ -55,6 +56,8 @@ data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var
if (siteName != other.siteName) return false
if (gcjLat != other.gcjLat) return false
if (gcjLon != other.gcjLon) return false
if (wgs84Lon != other.wgs84Lon) return false
if (wgs84Lat != other.wgs84Lat) return false
return true
}
}
@@ -92,7 +95,7 @@ data class StartTaskReqBean(var sn: String, var lineId: Long)
data class ArriveSiteReqBean(var sn: String, var siteId: Long)
data class PrepareTaskReqBean(var sn: String, var siteId: Long)
data class PrepareTaskRespBean(var data: Result): BaseData(){ //taskType 1:虚拟任务 2:接驾任务3:送驾任务
data class PrepareTaskRespBean(var data: Result?): BaseData(){ //taskType 1:虚拟任务 2:接驾任务3:送驾任务
data class Result(
var lineId: Long, var cityCode: Int, var taskType: Int,
var startSite: Site, var endSite: Site

View File

@@ -65,6 +65,7 @@ import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.bean.ContrailListRespBean
import com.mogo.och.taxi.bean.OrderDetail
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.bean.Site
import com.mogo.och.taxi.bean.StartServiceRespBean
import com.mogo.och.taxi.callback.IOCHTaxiAutopilotPlanningCallback
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback
@@ -271,6 +272,11 @@ object TaxiModel {
return valueOf(order.orderStatus)
}
fun getCurTaskStatus(): Int? {
if (mCurrentTaskAndOrder == null) TaskStatusEnum.None
return mCurrentTaskAndOrder?.currentStatus
}
fun getCurTaskAndOrder(): QueryCurrentTaskRespBean.Result? {
return mCurrentTaskAndOrder
}
@@ -371,7 +377,7 @@ object TaxiModel {
}
}
//检测当前订单
//检测当前任务
fun checkCurrentTask(): Boolean {
return mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.endSite != null
@@ -477,10 +483,10 @@ object TaxiModel {
val parameters = AutopilotControlParameters()
val startWgsLon = mCurrentTaskAndOrder!!.startSite!!.gcjLon
val startWgsLat = mCurrentTaskAndOrder!!.startSite!!.gcjLat
val endWgsLon = mCurrentTaskAndOrder!!.endSite!!.gcjLon
val endWgsLat = mCurrentTaskAndOrder!!.endSite!!.gcjLat
val startWgsLon = mCurrentTaskAndOrder!!.startSite!!.wgs84Lon
val startWgsLat = mCurrentTaskAndOrder!!.startSite!!.wgs84Lat
val endWgsLon = mCurrentTaskAndOrder!!.endSite!!.wgs84Lon
val endWgsLat = mCurrentTaskAndOrder!!.endSite!!.wgs84Lat
parameters.vehicleType = BUSINESSTYPE
parameters.startName = mCurrentTaskAndOrder!!.startSite!!.siteName // 8.10 拼音首字母大写 改为直接传中文
parameters.endName = mCurrentTaskAndOrder!!.endSite!!.siteName // 8.10 拼音首字母大写 改为直接传中文
@@ -679,10 +685,10 @@ object TaxiModel {
//3、刚过站且过站距离在15m内 提交到站
if (stationAngle > 90 && distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) {
if ((!checkCurrentOrder()
|| (getCurOrderStatus() === TaxiOrderStatusEnum.ArriveAtEnd))
if ((!checkCurrentTask()
|| (getCurTaskStatus() == TaskStatusEnum.StartTask.code))
) {
i(SceneConstant.M_TAXI + TAG, "order exception or order ArriveAtEnd")
i(SceneConstant.M_TAXI + TAG, "task null or TaskStatus = ${getCurTaskStatus()}")
return
}
i(SceneConstant.M_TAXI + TAG, "judgeEndStation() = 刚过站且在15m内")

View File

@@ -13,6 +13,7 @@ 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.common.module.biz.constant.LoginStatusManager
import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.ToastUtilsOch
import com.mogo.och.common.module.voice.VoiceNotice
@@ -29,6 +30,7 @@ import com.mogo.och.taxi.constant.TaskTypeEnum
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxtServingStatusManager
import com.mogo.och.taxi.constant.TaxtServingStatusManager.isOpeningOrderStatus
import com.mogo.och.taxi.network.CarServiceManager
import com.mogo.och.taxi.network.CarServiceManager.cancelOrder
import com.mogo.och.taxi.network.CarServiceManager.contrailList
@@ -388,10 +390,12 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
if (data.data.orderStatus == TaxiOrderStatusEnum.Cancel.code){
VoiceNotice.showNotice("乘客已经取消")
mCurrentTaskAndOrder = null
updateTaskAndOrderUi()
updateNoTaskAndOrderUi()
TaxiModel.cancelAutopilot()
return
}
if (data.data.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code){//到站
//结束导航
updateOrderMileAndDur(data.data.mileage,data.data.duration.toInt())
return
}
@@ -426,7 +430,9 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
private fun startPrepareTask30S(siteId: Long) {
UiThreadHandler.postDelayed({
pullTask(siteId)
if (isLogin() && isOpeningOrderStatus()){
pullTask(siteId)
}
}, TaxiUnmannedConst.TIMER_PREPARE_TASK_INTERVAL)
}
@@ -436,15 +442,18 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
siteId,
object : OchCommonServiceCallback<PrepareTaskRespBean> {
override fun onSuccess(data: PrepareTaskRespBean?) {
d(SceneConstant.M_TAXI + TAG, "prepareTask = " + GsonUtil.jsonFromObject(data))
if (data == null || data.code != 0) return
d(SceneConstant.M_TAXI + TAG, "prepareTask = " + GsonUtil.jsonFromObject(data)
+ ", isOpeningOrderStatus = ${isOpeningOrderStatus()}")
if (data?.data == null || data.code != 0) return
//去下载轨迹, 下发给工控机下载
TaxiModel.queryTaskContrail(Array(1) {data.data.lineId})
TaxiModel.queryTaskContrail(Array(1) {data.data!!.lineId})
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "$code $msg")
startPrepareTask30S(siteId) //失败后30s再次调用获取下一任务
if (isLogin() && isOpeningOrderStatus()){
startPrepareTask30S(siteId) //失败后30s再次调用获取下一任务
}
}
})

View File

@@ -19,8 +19,10 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverlayManager
import com.mogo.eagle.core.network.utils.GsonUtil
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.overlay.core.Level
@@ -135,7 +137,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
updateUntruthTask(taskAndOrderUiState.untruthTask)
}else{
updateReserveOrderChanged(taskAndOrderUiState.taskAndOrder)
updateCurrentOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
updateCurrentTaskAndOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
}
}
@@ -150,7 +152,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
@RequiresApi(Build.VERSION_CODES.N)
private fun updateOrderTotalMilAndDur(mileage: Float, duration: Int) {
val strHtml2 =
("<font color=\"#CAD6FF\">总里程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
("<font color=\"#CAD6FF\">程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
}
@@ -247,7 +249,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
*/
@RequiresApi(Build.VERSION_CODES.N)
@SuppressLint("SetTextI18n", "UseCompatLoadingForDrawables")
fun updateCurrentOrderStatusChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
fun updateCurrentTaskAndOrderStatusChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
if (taskAndOrder == null) return
if (taskAndOrder.endSite == null && taskAndOrder.order == null){
isHaveBeingOrder(false)
@@ -276,6 +278,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
updateUIShowStatus(taskType,currentStatus,order)
when (taskType) {
TaskTypeEnum.VirtualTask.code -> {// 演练任务
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code){
updateOrderUI(order)
@@ -301,9 +304,74 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
}
updateMapMarkers()
updateRemainDistanceAndTime(false)
}
private fun updateMapMarkers() {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.endSite != null ) {
when(mCurrentTaskAndOrder!!.currentStatus){
TaskStatusEnum.GetTask.code -> {
setOrRemoveMapMaker(
true,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
TaskStatusEnum.StartTask.code -> {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
TaskStatusEnum.CompleteTask.code -> {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
false,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
}
}else{
d(M_TAXI + TAG,"CurrentTaskAndOrder == "+GsonUtil.jsonFromObject(mCurrentTaskAndOrder))
}
}
@RequiresApi(Build.VERSION_CODES.N)
private fun updateOrderUI(order: OrderDetail) {
@@ -321,19 +389,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
isHaveBeingOrder(false)
}
TaxiOrderStatusEnum.Cancel.code -> { //取消
updateOrderBottomBtn(
taskClickBtn.text.toString(),
Color.parseColor("#4DFFFFFF"),
Color.parseColor("#4D1D5EF3"),
false
)
taskTypeTv.background = resources.getDrawable(R.drawable.task_cancel_type_btn_bg,null)
taskTypeTv.text = resources.getString(R.string.passenger_cancel_order)
onCurrentOrderCancelDone()
hideNavi()
}
TaxiOrderStatusEnum.ArriveAtEnd.code -> { //到达目的地
taskStatus.text = resources.getString(R.string.task_start_end_site)
setPointBlueGreen()
@@ -343,27 +398,9 @@ class TaxiBeingTaskFragment : BaseFragment(),
Color.parseColor("#FF1D5EF3"),
true
)
order.orderStartSite?.let {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
false,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
hideNavi()
}
TaxiOrderStatusEnum.OnTheWayToEnd.code -> { //送驾中
taskStatus.text = resources.getString(R.string.task_start_end_site)
setPointBlueGreen()
@@ -373,27 +410,8 @@ class TaxiBeingTaskFragment : BaseFragment(),
Color.parseColor("#FF1D5EF3"),
true
)
order.orderStartSite?.let {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
}
TaxiOrderStatusEnum.UserArriveAtStart.code,TaxiOrderStatusEnum.ArriveAtStart.code -> {
//乘客到达上车点,验证成功 ; 到达乘客上车点
setPointGreenBlue()
@@ -408,25 +426,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
)
updateOtherInfo()
order.orderStartSite?.let {
setOrRemoveMapMaker(
true,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
hideNavi()
}
@@ -439,24 +438,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
Color.parseColor("#4D1D5EF3"),
false
)
order.orderStartSite?.let {
setOrRemoveMapMaker(
true,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
}
}
@@ -554,14 +535,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
AmapNaviToDestinationModel.getInstance(context).setOCHTaciNaviChangedCallback(this)
}
private fun showOrHideNavi() {
naviToStart.visibility = View.GONE
naviToEnd.visibility = View.GONE
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
mTaxiFragment?.showAmapNaviToStationFragment(false)
mTaxiFragment?.showRottingToStationFragment(false)
}
/**
* 剩余里程和剩余时间
* @param meters m
@@ -570,6 +543,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
@RequiresApi(Build.VERSION_CODES.N)
fun updateDistanceAndTime(meters: Long, timeInSecond: Long) {
// CallerLogger.INSTANCE.d(M_TAXI + TAG,"meters = "+meters+"timeInSecond ="+timeInSecond);
if (mCurrentTaskAndOrder == null) return
if (mCurrentTaskAndOrder!!.endSite == null && mCurrentUntruthTask == null) return
var dis = "0"
@@ -596,25 +570,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
showNotice(resources.getString(R.string.module_och_taxi_order_arrive_end_200m_tip))
}
@RequiresApi(Build.VERSION_CODES.N)
fun onCurrentOrderRouteInfoGot(routeInfo: OrderQueryRouteInfoRespBean.Result?) { // 单位 米, 秒
if (routeInfo == null) return
d(SceneConstant.M_TAXI + TAG, "durationToEnd = " + routeInfo.durationToEnd)
var dis = "0"
val distance = routeInfo.distanceToEnd
val duration = routeInfo.durationToEnd
if (routeInfo.distanceToEnd > 0) {
dis = NumberFormatUtil.formatLong(distance.toDouble() / 1000)
}
val strHtml2 =
("<font color=\"#CAD6FF\">全程 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> 公里</font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<b><font color=\"#FFFFFF\">" + ceil(
duration.toDouble() / 60
).toInt() + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>")
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
}
override fun onDestroyView() {
super.onDestroyView()
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
@@ -661,10 +616,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
closeOrderDialog.show()
}
private fun clearOrderTag() {
taskOtherInfo.text = "距离 - - 公里,用时 - - 分"
}
/**
* 是否有正在进行的订单进行UI显示
*
@@ -684,6 +635,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
noOrderDataTv.text = "暂无进行中订单"
mBeingOrderLayout.visibility = View.GONE
}
} catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况
TaxiModel.clearCurrentOCHOrder()
}
@@ -715,33 +667,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
mTaxiFragment?.startNaviToEndStation(isShow)
}
private fun onCurrentOrderCancelDone() {
//去除起终点
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.endSite != null) {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.gcjLat,
mCurrentTaskAndOrder!!.startSite!!.gcjLon,
R.raw.star_marker
)
setOrRemoveMapMaker(
false,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.gcjLat,
mCurrentTaskAndOrder!!.endSite!!.gcjLon,
R.raw.end_marker
)
}
//提交取消订单后的回调
// ToastUtils.showShort("订单取消成功")
//更新界面
isHaveBeingOrder(false)
showOrHideNavi()
clearOrderTag()
}
/**
* 订单流转debug START
*/