From e9e26b31cf2f23dbed33bd74ea8a947bc134248c Mon Sep 17 00:00:00 2001 From: yangyakun Date: Mon, 27 Feb 2023 14:35:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[m1]=20[1.1.2]=20[=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/model/CharterPassengerModel.kt | 4 +- .../BusPassengerFunctionDevicePresenter.kt | 13 +-- .../och/bus/passenger/ui/view/LineSiteView.kt | 104 +++++++++++++++--- 3 files changed, 93 insertions(+), 28 deletions(-) diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt index 62b32f6f14..56ca04d23f 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt @@ -187,7 +187,6 @@ object CharterPassengerModel { "onAutopilotRotting = ${GsonUtil.jsonFromObject(globalPathResp)}" ) globalPathResp?.wayPointsList?.let { - // todo 启动路距计算 startCalculateDistanceLoop() } } @@ -355,7 +354,6 @@ object CharterPassengerModel { orderInfo = null locusInfo = null if (data.businessStatus == 2) {// 订单结束 没有还车 - // todo 还车中 需要显示 @com.mogo.och.bus.passenger.ui.view.EndOrderView 页面 setOrderStatus(OrderStatusEnum.NoOrderUse) } else { // 车辆空闲 订单结束已经还车 @@ -434,7 +432,7 @@ object CharterPassengerModel { * 查询车辆状态 判断订单是否结束、是否显示结束业务 */ private fun calculateDistance() { - + // TODO: 启动轨迹计算 } // endregion diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt index 754142a98c..6ea9291127 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt @@ -27,16 +27,11 @@ class BusPassengerFunctionDevicePresenter(view: M1DeviceFragment?) : override fun onCreate(owner: LifecycleOwner) { super.onCreate(owner) OCHM1LightAirconditionDoorStatusManager.addListener(TAG, this) - CharterPassengerModel.setControllerStatusCallback(TAG,object : - IBusPassengerControllerStatusCallback{ - - override fun onCarLocationChanged(location: MogoLocation?) { - location?.let { - gnssSpeed = it.gnssInfo.vehicleSpeed - } + CharterPassengerModel.setControllerStatusCallback(TAG) { location -> + location?.let { + gnssSpeed = it.gnssInfo.vehicleSpeed } - - }) + } } override fun onDestroy(owner: LifecycleOwner) { diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt index 5bccac5aa9..b112f98337 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt @@ -16,11 +16,14 @@ import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.bean.LoopInfo import com.mogo.och.bus.passenger.bean.response.LineInfoListResponse import com.mogo.och.bus.passenger.bean.response.LineInfoResponse import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse import com.mogo.och.bus.passenger.model.CharterPassengerModel +import com.mogo.och.bus.passenger.net.BusPassengerModelLoopManager import com.mogo.och.bus.passenger.net.BusPassengerServiceManager +import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionDevicePresenter import com.mogo.och.bus.passenger.ui.adapter.OrderLineItemAdapter import com.mogo.och.bus.passenger.ui.adapter.OrderSiteItemAdapter import com.mogo.och.bus.passenger.view.BottomDecoration @@ -38,6 +41,8 @@ class LineSiteView @JvmOverloads constructor( companion object{ const val TAG = "LineSiteView" + const val TAGLINELOOP = "LineSiteViewLineLoop" + const val TAGSITELOOP = "LineSiteViewSiteLoop" } private var checkLine: LineInfoResponse.LineInfo?=null @@ -54,6 +59,8 @@ class LineSiteView @JvmOverloads constructor( private var lineAdapter: OrderLineItemAdapter private var siteAdapter: OrderSiteItemAdapter + private var gnssSpeed =0.0 + private val loadingAni = ObjectAnimator.ofFloat(iv_loading_wait_driver, "rotation", 0f, 90f ,180f, 270f, 360f).apply { repeatCount = -1 interpolator = LinearInterpolator() @@ -86,14 +93,27 @@ class LineSiteView @JvmOverloads constructor( checkLine?.let { querySitesByLineId(it.lineId.toString()) } + setViewOrdeWithLine(true) }else{ queryLineList() + setViewOrdeWithLine(false) } initListener() } + private fun setViewOrdeWithLine(enable:Boolean) { + tv_switch_line.isEnabled = enable + if(enable) { + gl_line_cancle_submit_guide.visibility = View.GONE + g_side_cancle_submit_group.visibility = View.GONE + }else{ + gl_line_cancle_submit_guide.visibility = View.VISIBLE + g_side_cancle_submit_group.visibility = GONE + } + } + private fun initListener() { lineAdapter.checkChangeListener = object :OrderLineItemAdapter.CheckListener{ override fun onCheckListener(lineInfo: LineInfoResponse.LineInfo) { @@ -118,6 +138,10 @@ class LineSiteView @JvmOverloads constructor( ToastUtils.showLong("请选择线路") return@onClick } + if(!CallerTelematicManager.getClientConnStatus()){ + ToastUtils.showLong("乘客屏无法连接司机屏请联系安全员") + return@onClick + } tempCheckLine?.let { val msg = ChangeDestMsg( it.lineId!!.toInt(), @@ -132,8 +156,10 @@ class LineSiteView @JvmOverloads constructor( TelematicConstant.BUSINESS_STRING, GsonUtils.toJson(msg).toByteArray() ) + startAni() + // 启动查看和司机端链接 + BusPassengerModelLoopManager.setLoopFunction(TAGLINELOOP, LoopInfo(3,::checkServerStatus)) } - startAni() } tv_site_cancle.onClick { ToastUtils.showLong("取消切换") @@ -143,6 +169,10 @@ class LineSiteView @JvmOverloads constructor( ToastUtils.showLong("请选择站点") return@onClick } + if(!CallerTelematicManager.getClientConnStatus()){ + ToastUtils.showLong("乘客屏无法连接司机屏请联系安全员") + return@onClick + } checkLine?.let {lineInfo-> tempCheckSite?.let {siteInfo-> val msg = ChangeDestMsg( @@ -159,8 +189,10 @@ class LineSiteView @JvmOverloads constructor( GsonUtils.toJson(msg).toByteArray() ) } + startAni() + // 启动查看和司机端链接 + BusPassengerModelLoopManager.setLoopFunction(TAGLINELOOP, LoopInfo(3,::checkServerStatus)) } - startAni() } tv_switch_line.onClick { ToastUtils.showLong("判断速度是否为0,开始查询线路信息") @@ -169,24 +201,52 @@ class LineSiteView @JvmOverloads constructor( endAni() } - CallerTelematicListenerManager.addListener(TAG,object : IReceivedMsgListener{ - override fun onReceivedMsg(type: Int, byteArray: ByteArray) { - if(type==TelematicConstant.BUSINESS_STRING){ - val msg = GsonUtils.fromJson(String(byteArray), - ChangeDestMsg::class.java) as ChangeDestMsg - if(msg.type==DPMsgType.TYPE_CHANGE_DEST.type){ - if(msg.destSiteId==0){ - // TODO: 选择线路结束 - ToastUtils.showShort("线路确定") - }else{ - // TODO: 选择站点结束 - ToastUtils.showShort("站点确定") + CallerTelematicListenerManager.addListener(TAG,msgReceived) + CharterPassengerModel.setControllerStatusCallback(TAG) { location -> + location?.let { + gnssSpeed = it.gnssInfo.vehicleSpeed + } + } + tv_switch_line.onClick { + if(gnssSpeed<0.01){ + // 可以切换路径 + gl_line_cancle_submit_guide.visibility = View.VISIBLE + }else{ + ToastUtils.showShort("请停车后再修改目的地~") + } + } + } + + /** + * 接收司机屏反馈信息 + */ + val msgReceived = object : IReceivedMsgListener{ + override fun onReceivedMsg(type: Int, byteArray: ByteArray) { + if(type==TelematicConstant.BUSINESS_STRING){ + val msg = GsonUtils.fromJson(String(byteArray), + ChangeDestMsg::class.java) as ChangeDestMsg + if(msg.type==DPMsgType.TYPE_CHANGE_DEST.type){ + if(msg.destSiteId==0){ + // TODO: 选择线路结束 + ToastUtils.showShort("线路确定") + gl_line_cancle_submit_guide.visibility = View.GONE + g_side_cancle_submit_group.visibility = View.VISIBLE + if(checkLine!=null) { + lineList.clear() + lineList.add(checkLine!!) + lineAdapter.notifyDataSetChanged() } - endAni() + BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) + }else{ + // TODO: 选择站点结束 + ToastUtils.showShort("站点确定") + g_side_cancle_submit_group.visibility = View.GONE + gl_line_cancle_submit_guide.visibility = View.GONE } + endAni() } } - }) + } } private fun startAni(){ @@ -205,6 +265,10 @@ class LineSiteView @JvmOverloads constructor( override fun onDetachedFromWindow() { super.onDetachedFromWindow() loadingAni.cancel() + CallerTelematicListenerManager.removeListener(TAG) + BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) + CharterPassengerModel.setControllerStatusCallback(TAG,null) + } private fun queryLineList() { @@ -221,6 +285,14 @@ class LineSiteView @JvmOverloads constructor( }) } + private fun checkServerStatus(){ + if (!CallerTelematicManager.getClientConnStatus()) { + ToastUtils.showShort("断开和司机端连接、请联系安全员") + BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) + endAni() + } + } + private fun querySitesByLineId(lineId:String) { BusPassengerServiceManager.queryLineSiteList(context,lineId,object :OchCommonServiceCallback{ override fun onSuccess(data: SiteInfoResponse?) { From 707e0e03db5f48fa4f44f75058022ccb1bd440f4 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Mon, 27 Feb 2023 21:22:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[m2]=20[1.1.2]=20[=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E4=B8=8B=E4=B8=80=E4=B8=AA=E5=8F=AF=E9=80=89=E7=AB=99=E7=82=B9?= =?UTF-8?q?]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/response/SiteInfoResponse.kt | 1 + .../passenger/model/CharterPassengerModel.kt | 57 +++++++++++++++++-- .../ui/adapter/OrderSiteItemAdapter.kt | 6 +- .../och/bus/passenger/ui/view/LineSiteView.kt | 56 ++++++++++-------- 4 files changed, 92 insertions(+), 28 deletions(-) diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/SiteInfoResponse.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/SiteInfoResponse.kt index e6267b6a48..666a718d7f 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/SiteInfoResponse.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/SiteInfoResponse.kt @@ -18,6 +18,7 @@ data class SiteInfoResponse(val data: List?) : BaseData(){ val GcjLat: Double?,//高德坐标 val seq: Double?, val type: Int?, + var isNear:Boolean=false ) } diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt index 56ca04d23f..a315df8aba 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt @@ -17,7 +17,9 @@ import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListener import com.mogo.eagle.core.network.utils.GsonUtil import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P +import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.bus.passenger.bean.LoopInfo import com.mogo.och.bus.passenger.bean.response.* import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback @@ -30,6 +32,7 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg import system_master.SystemStatusInfo +import java.util.* import java.util.concurrent.ConcurrentHashMap /** @@ -256,7 +259,9 @@ object CharterPassengerModel { ordrLagic(data?.data) } - override fun onFail(code: Int, msg: String) {} + override fun onFail(code: Int, msg: String) { + ToastUtils.showShort("$code:$msg") + } }) } @@ -338,7 +343,9 @@ object CharterPassengerModel { carStatusLogic(data.data) } - override fun onFail(code: Int, msg: String) {} + override fun onFail(code: Int, msg: String) { + ToastUtils.showShort("$code:$msg") + } }) } @@ -393,7 +400,9 @@ object CharterPassengerModel { // todo 轮训时间校准 } - override fun onFail(code: Int, msg: String) {} + override fun onFail(code: Int, msg: String) { + ToastUtils.showShort("$code:$msg") + } }) } // endregion @@ -408,7 +417,9 @@ object CharterPassengerModel { locusInfo = data.data } - override fun onFail(code: Int, msg: String) {} + override fun onFail(code: Int, msg: String) { + ToastUtils.showShort("$code:$msg") + } }) } // endregion @@ -444,4 +455,42 @@ object CharterPassengerModel { } } + /** + * 计算需要禁用的站点 + */ + fun calculateCurrentSite(data: List): Pair { + var distanceMap:MutableMap = TreeMap() + // 计算所有点的距离 + data.forEachIndexed { index, siteInfo -> + mLocation?.let { currentInfo -> + // 两点之间的距离 + val calculateLineDistance = CoordinateUtils.calculateLineDistance( + currentInfo.longitude, + currentInfo.latitude, + siteInfo.GcjLon!!, + siteInfo.GcjLat!! + ) + if (calculateLineDistance < 30) { + return if (index + 1 <= data.size - 1) { + Pair(index+1,true) + } else { + Pair(index,true)// 距离最后一个站点小于30m + } + } + distanceMap.put(calculateLineDistance,index) + } + } + var first = -1 + if(distanceMap.size>=2){ + for (mutableEntry in distanceMap) { + if(first>0){ + return Pair(Math.max(first,mutableEntry.value),false) + } + first = mutableEntry.value + } + } + + return Pair(0,false) + } + } \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/adapter/OrderSiteItemAdapter.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/adapter/OrderSiteItemAdapter.kt index 209b8778e4..839baba03b 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/adapter/OrderSiteItemAdapter.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/adapter/OrderSiteItemAdapter.kt @@ -64,7 +64,11 @@ class OrderSiteItemAdapter(private val context: Context, private val dataList: M notifyItemChanged(checkIndex) checkChangeListener?.onCheckListener(siteInfo) }else{ - ToastUtils.showShort("请选择可选站点") + if(siteInfo.isNear){ + ToastUtils.showShort("您已在此站点附近") + }else{ + ToastUtils.showShort("请选择返程路线") + } } } } diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt index b112f98337..f6d0fc3a6d 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/view/LineSiteView.kt @@ -15,6 +15,7 @@ import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.LoopInfo import com.mogo.och.bus.passenger.bean.response.LineInfoListResponse @@ -119,8 +120,8 @@ class LineSiteView @JvmOverloads constructor( override fun onCheckListener(lineInfo: LineInfoResponse.LineInfo) { ToastUtils.showLong("选中线路${lineInfo} 对比当前坐标计算需要禁用的站点") tempCheckLine = lineInfo + querySitesByLineId(lineInfo.lineId.toString()) siteAdapter.clearCheck() - siteAdapter.setEnableIndex(3) } } siteAdapter.checkChangeListener = object :OrderSiteItemAdapter.CheckListener{ @@ -222,28 +223,29 @@ class LineSiteView @JvmOverloads constructor( */ val msgReceived = object : IReceivedMsgListener{ override fun onReceivedMsg(type: Int, byteArray: ByteArray) { - if(type==TelematicConstant.BUSINESS_STRING){ - val msg = GsonUtils.fromJson(String(byteArray), - ChangeDestMsg::class.java) as ChangeDestMsg - if(msg.type==DPMsgType.TYPE_CHANGE_DEST.type){ - if(msg.destSiteId==0){ - // TODO: 选择线路结束 - ToastUtils.showShort("线路确定") - gl_line_cancle_submit_guide.visibility = View.GONE - g_side_cancle_submit_group.visibility = View.VISIBLE - if(checkLine!=null) { - lineList.clear() - lineList.add(checkLine!!) - lineAdapter.notifyDataSetChanged() + UiThreadHandler.post { + if(type==TelematicConstant.BUSINESS_STRING){ + val msg = GsonUtils.fromJson(String(byteArray), + ChangeDestMsg::class.java) as ChangeDestMsg + if(msg.type==DPMsgType.TYPE_CHANGE_DEST.type){ + if(msg.destSiteId==0){ + checkLine = tempCheckLine + ToastUtils.showShort("线路确定") + gl_line_cancle_submit_guide.visibility = View.GONE + g_side_cancle_submit_group.visibility = View.VISIBLE + if(checkLine!=null) { + lineList.clear() + lineList.add(checkLine!!) + lineAdapter.notifyDataSetChanged() + } + BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) + }else{ + ToastUtils.showShort("站点确定") + g_side_cancle_submit_group.visibility = View.GONE + gl_line_cancle_submit_guide.visibility = View.GONE } - BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) - }else{ - // TODO: 选择站点结束 - ToastUtils.showShort("站点确定") - g_side_cancle_submit_group.visibility = View.GONE - gl_line_cancle_submit_guide.visibility = View.GONE + endAni() } - endAni() } } } @@ -299,8 +301,16 @@ class LineSiteView @JvmOverloads constructor( if (data?.data == null) return siteAdapter.setDataList(data.data) if(data.data.isNotEmpty()) { - // TODO: 计算当前站点是那个 - currentSite = data.data[0] + // 计算当前站点是那个 + val calculateCurrentSite = CharterPassengerModel.calculateCurrentSite(data.data) + val index = if(calculateCurrentSite.first<=data.data.size){ + calculateCurrentSite.first + }else{ + data.data.size-1 + } + currentSite = data.data[index] + currentSite!!.isNear = calculateCurrentSite.second + siteAdapter.setEnableIndex(index) } }